使用rails button_to
帮助器我试图在控制器中运行update
方法。我需要手动设置要更新的对象的ID。我认为我的代码应该是正确的,但是rails一直试图将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
永远不会执行控制器更新方法。 Web浏览器上的错误是:
Unknown action
No action responded to 3. Actions: create, index, new, search, show, and update
'3'是currently_viewing_person
传递:id
的正确方法是什么,以便更新可以从params[:id]
中提取
答案 0 :(得分:3)
button_to
默认使用POST。要进行更新,您需要一个PUT,因此请将该方法与其他参数一起传递:
button_to ">",
{ :controller=>'people', :action=>'update',
'person'=>{:team=>team_leader.team},
:id=>currently_viewing_person },
:method => :put
请注意,该方法必须作为单独的哈希
传递答案 1 :(得分: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 log确认确实使用了PUT:
Processing PeopleController#update (for 127.0.0.1 at 2010-07-15 00:10:09) [PUT]