私はRailsを初めて使い、link_toヘルパーを使用して、GETリクエストではなくPUTリクエストを発行するリンクを作成しようとしています。具体的には、管理者のパネルからアプリのユーザーアカウントを有効にするリンクを作成しようとしています。 Rails 3.0.5。
私のroutes.rbファイルは:
match '/admin/users/:id/activate' => 'admin#activate_user',
:action => :activate_user, :via => :put
私の見解は:
link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put
ただし、これにより、ソースコード/admin/users/7/activate?method=put
を含むURL(たとえば)<a href="/admin/users/7/activate?method=put">Activate</a>
が生成されます。
代わりに<a href = "/admin/users/7/activate" data-method="put">Activate</a>
を生成したい
私はbutton_toを使用できることを理解していますが、しばらくの間この問題に取り組んできており、他のチュートリアルで私がやっていることは有効であると言われているときに、この動作が見られる理由がわかりません。必要な動作を備えたlink_toヘルパーを作成するにはどうすればよいですか?
Updated-メソッドが指定されていない限り、link_to
ヘルパーはGETを実行します。
ルートファイルでmatch
ではなく、正確なリクエストタイプを指定する方が適切です。次のようにルートのmatch
をput
に置き換えてみてください。
put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user'
link_to 'Activate', activate_user_path(user.id), method: :put
activate_user
メソッドはadmins
コントローラーに存在する必要があります。 docs には、link_to
ヘルパーに関する詳細情報があります。
link_to
は、:method => :put
がパスハッシュの一部であると見なします。それ以外の場合はそれを伝える必要があります。パスを角括弧で囲みます。
link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put
これでlink_to
は:method => :put
をリンクのパスの一部ではなくオプションとして認識します。
余談ですが、できる限りパスハッシュの代わりにルートヘルパーを使用するようにしてください。物事をきちんと整頓し、このようなひどい状況を避けます。