Rails 3.0.10,客户路线,post和form_for标签

我的路线中有这个:

resources :events do collection do post 'moderate' end end 

耙路线告诉我:

 moderate_events POST /events/moderate(.:format) {:controller=>"events", :action=>"moderate"} 

我有一个“管理”控制器,它只列出需要调节的事件:

 @modevents = Event.where('moderated  1') 

到目前为止,所有尚未审核的事件都可以在视图中显示:

  Display Stuff here  

我想在循环中放置一个更新了审核值的表单,但对于我的生活,我无法弄清楚要放在form_for中的内容 – 我尝试过:

  moderate_events_path do |f| %>   

返回的html是:

 

当我单击“提交”按钮时,我收到以下错误:

 Couldn't find Event with ID=moderate 

解决方案非常简单,在路线中将“post”更改为“put”:

 resources :events do collection do put 'moderate' end end 

现在它可以正常工作。 更新,甚至自定义更新都是“放置”function。

答案实际上是在上面的文字底部,但也许并不明显。 如果你正在更新东西,你应该使用“put”而不是post。

您还可以通过指定使用POST:

 <%= form_for me, :url => moderate_events_path, :method => :post do |f| %> 

但如前所述,需要在更新和创建之间进行区分。 rails中的标准是update == put,create == post。