8

PUTアクションを実行したいbutton_toがあります(このリソースについて更新できるものは1つだけです。「確認済み」として更新されるため、アクションの実行に関連する他のフォームフィールドはありません)。

これは私の見解です(ボタンが別のコントローラーに属するビュー上にあるため、コントローラーは明示的に指定されています):

<%= button_to "Acknowledged", :controller => 'practice_sessions', :id => @practice_session.id, :method => :put %>

ルートファイルでは、リソースはRESTfulリソースとして宣言されています。

  resources :practice_sessions

このリソースのコントローラーには作成アクションと更新アクションがあり、上記のbutton_toは作成アクションを呼び出します。更新アクションを呼び出してほしい。

これは、作成アクションが実行される直前にログを介して行われます。

Started POST "/practice_sessions?id=21&method=put" for 127.0.0.1 at 2010-11-17 08:52:46 +0000
  Processing by PracticeSessionsController#create as HTML
  Parameters: {"authenticity_token"=>"1EW0IlI38d0f4wST5azrCEZVZPfih7i0UvCGSF7eqbc=", "id"=>"21", "method"=>"put"}
4

3 に答える 3

19

構文が少しずれています。 ボタンのタイトル、ハッシュ、ハッシュbutton_toの3つの引数を取ります。ルートパラメータはに入る必要がありますが、に入る必要があります。したがって、次のように書き直すことができます。optionshtml_options:method=>:puthtml_optionsoptions

<%= button_to "Acknowledged", { :controller => 'practice_sessions',
  :id => @practice_session.id}, 
  :method => :put %>

クリックすると、リクエストはによって処理されますPracticeSessionsController#update

于 2010-11-16T21:02:35.073 に答える
2

結局、私は名前付きルートを使用するより安らかなアプローチを採用することにしました。これはうまくいくようです。他の方法が機能しない理由はまだ100%わかりませんが、これはa)より整然としていて、b)より一般的であるように思われるため、重要ではないと思います。

<%= button_to "Acknowledge", practice_session_path(@practice_session), :method => :put %>
于 2010-11-17T06:35:30.950 に答える
1

:method => :put引数をハッシュで明示的に渡す必要がある場合があります。引数がhtml_optionsハッシュに組み込まれている可能性がありますoptions

これを試して:

<%= button_to "Acknowledged", { :controller => 'practice_sessions', :id => @practice_session.id }, :method => :put %>

:controller(との周りの明示的な中括弧に注意してください:id

于 2010-11-16T21:04:21.363 に答える