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|