Rails传递:id与params

时间:2010-07-15 02:50:21

标签: ruby-on-rails params

使用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]中提取

2 个答案:

答案 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]