Ruby on rails Rails pass:id和params

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

使用rails的
按钮\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