2

使用 rails button_tohelper 我试图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

控制器更新方法永远不会执行。网络浏览器上的错误是:

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 回答