我的路线中有这个:
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="✓" />
<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;功能
答案 0 :(得分:0)
答案实际上在上面的文字底部,但可能并不明显。如果你正在更新你应该使用的东西&#34; put&#34;不发布。
答案 1 :(得分:0)
您也可以通过指定:
来使用POST<%= form_for me, :url => moderate_events_path, :method => :post do |f| %>
但如前所述,需要在更新和创建之间进行区分。 rails中的标准是update == put,以及create == post。