Rails 3.0.10,客户路线,帖子和form_for标签

时间:2011-11-28 23:14:57

标签: ruby-on-rails routes form-for custom-routes

我的路线中有这个:

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

Rake路线告诉我:

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

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

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

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

<%- @modevents.each do |me| -%>
  Display Stuff here
<%- end -%>

我想在循环中添加一个更新了审核值的表单但是对于我的生活,我无法解决在form_for中放入的内容 - 我尝试过:

<%= form_for me, :url => moderate_events_path do |f| %>
  <%= f.submit %>
<% end %>

返回的html是:

<form accept-charset="UTF-8" action="/events/moderate" class="edit_event" id="edit_event_1" method="post">
  <div style="margin:0;padding:0;display:inline">
  <input name="utf8" type="hidden" value="&#x2713;" />
  <input name="_method" type="hidden" value="put" />

当我点击&#34;提交&#34;按钮我收到以下错误:

Couldn't find Event with ID=moderate

解决方案很简单,路线改变&#34; post&#34; to&#34; put&#34;:

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

现在它可以正常工作。更新,甚至是自定义更新都是&#34; put&#34;功能

2 个答案:

答案 0 :(得分:0)

答案实际上在上面的文字底部,但可能并不明显。如果你正在更新你应该使用的东西&#34; put&#34;不发布。

答案 1 :(得分:0)

您也可以通过指定:

来使用POST
<%= form_for me, :url => moderate_events_path, :method => :post do |f| %>

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