2

Railsヘルパーを使用して、コントローラーでメソッドbutton_toを実行しようとしています。update更新するオブジェクトの ID を手動で設定する必要があります。私が持っているコードは正しいはずですが、レールは ID をルートの一部として配置しようとし続けます。

ビューで:

button_to ">", :controller=>'people', :action=>'update', 'person'=>{:team=>team_leader.team}, :id=>currently_viewing_person

コントローラーで:

  def update
    @person = Person.find(params[:id])
    #...rest of method
  end

コントローラの update メソッドは実行されません。Web ブラウザのエラーは次のとおりです。

Unknown action

No action responded to 3. Actions: create, index, new, search, show, and update

「3」はの値でしたcurrently_viewing_person

:idアップデートを抽出できるように渡す正しい方法は何ですかparams[:id]

4

2 に答える 2

3

button_toデフォルトで POST を使用します。更新には PUT が必要なので、メソッドを他のパラメーターと一緒に渡します。

button_to ">", 
  { :controller=>'people', :action=>'update',
    'person'=>{:team=>team_leader.team}, 
    :id=>currently_viewing_person }, 
  :method => :put

メソッドは別のハッシュとして渡す必要があることに注意してください

于 2010-07-15T04:15:38.440 に答える
0

ドキュメントをもう一度読んで、REST アーキテクチャでは更新はPUTではなくを介して送信されることを理解してくださいPOST。正しいビュー コードは次のとおりです。

button_to ">", {:controller=>'people', :action=>'update', 'person'=>{:team=>team_leader.team}, :id=>currently_viewing_person}, :method => :put

奇妙なことに、このページのソースを表示すると、button_to によって作成されたフォームPOSTが使用されていることがわかります。

<form method="post" ...

しかし、Rails ログは、PUT が実際に使用されたことを確認しています。

Processing PeopleController#update (for 127.0.0.1 at 2010-07-15 00:10:09) [PUT]
于 2010-07-15T04:15:06.077 に答える