2

我的路线中有这个:

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

耙路线告诉我:

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" />

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

Couldn't find Event with ID=moderate

解决方案很简单,在路由中将“post”更改为“put”:

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

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

4

2 回答 2

0

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

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

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

于 2011-11-29T14:00:18.307 回答
0

答案实际上在底部上方的文字中,但可能并不明显。如果您要更新内容,则应该使用“放置”而不是发布。

于 2011-11-29T13:55:24.410 回答