我有一个表单,我正在尝试更新“事物”上的字段,但是,我遇到了大量问题,可能是愚蠢的事情。
我的代码如下:
<% 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。我做错了什么?
答案 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| %>
我确信其他人可以拿出更干净更干净的东西。