Ruby on rails Rails pass:id和params
使用rails的Ruby on rails Rails pass:id和params,ruby-on-rails,params,Ruby On Rails,Params,使用rails的按钮\u到助手,我试图在控制器中运行更新方法。我需要设置手动更新的对象的ID。我认为我的代码应该是正确的,但是rails一直试图将ID作为路由的一部分 他认为: button_to ">", :controller=>'people', :action=>'update', 'person'=>{:team=>team_leader.team}, :id=>currently_viewing_person 在控制器中: def updat
按钮\u到
助手,我试图在控制器中运行更新
方法。我需要设置手动更新的对象的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”是当前查看人员的值
传递
:id
以便更新可以从参数[:id]
中提取的正确方法是什么?这里再次阅读文档,了解在REST体系结构中,更新是通过PUT
发送的,而不是POST
。正确的视图代码为:
button_to ">", {:controller=>'people', :action=>'update', 'person'=>{:team=>team_leader.team}, :id=>currently_viewing_person}, :method => :put
奇怪的是,如果我在这个页面上查看source,button_创建的表单会显示正在使用的POST
:
<form method="post" ...
默认情况下,
按钮_to
使用POST。对于更新,您需要一个PUT,因此将该方法与其他参数一起传递:
button_to ">",
{ :controller=>'people', :action=>'update',
'person'=>{:team=>team_leader.team},
:id=>currently_viewing_person },
:method => :put
请注意,该方法必须作为一个单独的散列传入Heh——你比我快了几秒钟:)表单数据中出现“put”或类似内容的原因。
button_to ">",
{ :controller=>'people', :action=>'update',
'person'=>{:team=>team_leader.team},
:id=>currently_viewing_person },
:method => :put