ユーザーのFacebookIDに対応するfacebook_uidフィールドを持つユーザーモデルがあるとします。
ユーザーが自分のFacebookアカウントのリンクを解除できるようにしたい。そうするために、この属性をnilに設定する必要があります。
私は現在これを行う2つの方法を見ています
最初の方法:カスタムアクションを作成してリンクします
# app/controllers/users_controller.rb
def unlink_facebook_account
@user = User.find params[:id]
# Authorization checks go here
@user.facebook_uid = nil
@user.save
# Redirection go here
end
# config/routes.rb
ressources :users do
get 'unlink_fb', :on => :member, :as => unlink_fb
end
# in a view
= link_to "Unlink your facebook account", unlink_fb_path(@user)
2番目の方法:既存の更新アクションのフォームを作成します
# app/views/user/_unlink_fb_form.html.haml
= form_for @user, :method => "post" do |f|
= f.hidden_field :facebook_uid, :value => nil
= f.submit "Unlink Facebook account"
私はどちらの方法も大ファンではありません。
最初の例では、更新コントローラーがすでに実行できる何かに対して新しいアクションを追加する必要があります。
2つ目では、更新アクションをカスタマイズせずにfacebook_uidをnilに設定することはできません。また、JavaScriptを追加せずに、ボタンの代わりにリンクを設定することはできません。
それでも、このコンテキストに最適で最もエレガントなソリューションとして何をお勧めしますか?私は3番目の選択肢を逃しましたか?
解決策(Abdullah Jibalyが提案)
更新する属性をパラメーターとして使用して、更新アクションへのリンクを使用します。属性が0に設定されている場合を処理します
= link_to "Unlink your facebook account",
user_path(@user,
:user => { :facebook_uid => 0}),
:method => :put,
:confirm => "Are you sure?"