2012-02-16 10 views
20

私はRailsを使い慣れていないので、link_toヘルパーを使用してGETリクエストの代わりにPUTリクエストを発行するリンクを作成しようとしています。具体的には、私は管理者のパネルから自分のアプリでユーザーのアカウントを有効にするリンクを作成しようとしています。私はRails 3.0.5を使用しています。Ruby on Rails link_to putメソッドを使用する

私の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 

をしかし、これはソースコード<a href="/admin/users/7/activate?method=put">Activate</a>/admin/users/7/activate?method=put(例えば)URLを生成します。

私は、なぜ私はこの振る舞いを見ている私はbutton_toを使用することができます実現が、私はしばらくの間、この問題と格闘してきたと私は混乱している、ではなく、生成する<a href = "/admin/users/7/activate" data-method="put">Activate</a>

が欲しいです他のチュートリアルでは、私がやっていることが有効であるべきだと言っています。私が望む振る舞いでヘルパーを作成するにはどうしたらいいですか?

答えて

25

更新 - 方法が指定されていない限り、link_toヘルパーはGETを行います。

ルートファイルにmatchの代わりに、正確なリクエストタイプを指定する方が良いでしょう。どのように経路にputによってmatch交換に関する:

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ヘルパーに関する詳細情報があります。

+1

上記のput pathにはどのようなレーキルートが生成されますか?投稿できますか? – prasvin

+1

これは、ありがとう!そしてそれは最もクリーンな解決策です:) – maksim

+4

これは私のためには機能しません。 link_toにメソッドが定義されていない場合、[GET]エラーメッセージと一致するルートがありません。 – ndemoreau

30

link_to:method => :putがパスハッシュの一部だと考えます。そうでなければそれを伝えなければなりません。あなたのパスを括弧で囲みます。

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put 

link_toはオプションではなく、リンクのパスの一部として:method => :putを認識します。

可能な限り、パスハッシュの代わりにルートヘルパーを使用するようにしてください。物事をきれいに保ち、このような厄介な状況を避けます。

関連する問題