路由Rails form_for的问题

时间:2009-05-05 20:36:14

标签: ruby-on-rails

我有一个表单,我正在尝试更新“事物”上的字段,但是,我遇到了大量问题,可能是愚蠢的事情。

我的代码如下:

<% form_for :thing, :url => { :action => "update" } do |f| %>
    <%= f.collection_select :status_id, Thing.statuses, :first, :last %>
    <%= f.submit 'Submit' %>
<% end %>

这对我来说是正确的(@thing确实存在BTW),但是,当我提交时,我得到了

Unknown action
No action responded to 145

等等。网址为http://localhost:3000/things/145。我做错了什么?

3 个答案:

答案 0 :(得分:4)

使用RESTful路由时,会在识别出update请求时触发put操作。您可能只需要将该方法指定为html选项:

form_for :thing, :url => { :action => "update" }, :html => { :method => 'put' } do |f|

答案 1 :(得分:4)

如果您使用RESTful路由(我假设您是),您可以这样做:

<% form_for @thing do |f| %>
  <%= f.collection_select :status_id, Thing.statuses, :first, :last %>
  <%= f.submit 'Submit' %>
<% end %>

这将指向正确的操作,具体取决于@thing是否为new_record?

答案 2 :(得分:1)

我有点鄙视ActionView,所以当谈到它时我总是生疏,但试试

<% form_for :thing, :url => 
     url_for(:action => "update", :id => @thing) do |f| %>

我确信其他人可以拿出更干净更干净的东西。