2009-05-05 97 views
1

我有一个表单用于尝试和更新'事物'上的字段,但是,我遇到的问题很可能是愚蠢的。路由Rails的问题form_for

我的代码如下:

<% 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。我究竟做错了什么?

回答

4

如果您正在使用REST风格的路由(和我假设你),你可能只是这样做:

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

这将根据@thing是否为new_record?指向正确的操作。

1

我有点鄙视这样的ActionView我总是生疏,当涉及到它,但尝试

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

我相信别人能拿出一些机和吸尘器。

+0

ActionView的任何理由讨厌? ;) – 2009-05-05 20:45:32

+0

很多。可能是一个完全独立的SO问题。但让我们尽量保持它小:erb糟透了,我喜欢哈姆;我更愿意使用jQuery而不是Prototype,但助手都是一般的Prototype代码;无论如何,我通常不喜欢helpers的html输出;它是愚蠢的:查看代码不知道视图结构本身。例如,当我添加一个文件字段时,我想要一个表单来自动设置它的多部分属性。不能这样做。 (不能在haml中,但我有一些令人惊叹的vapourware,可以做到这一点以及更多。希望有一天它会在github上结束) – kch 2009-05-05 20:50:45

4

使用RESTful路由,当识别到put请求时,会触发update操作。你可能只需要指定的方法为HTML选项:

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