【问题标题】:Rails 3.0.10, customer routes, post and form_for tagRails 3.0.10、客户路线、post 和 form_for 标签
【发布时间】:2011-11-28 23:14:56
【问题描述】:

我的路线中有这个:

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

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

Couldn't find Event with ID=moderate

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

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

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

【问题讨论】:

  • 有一次我开始打字,但我在写的时候就搞定了。所以我想我会为了其他人的利益而把它留在这里。从外观上看,其他人已经发现它很有用。
  • 把最后三个部分放在评论里,然后是Q/A格式……不过不用关闭,是个有用的问题

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多