我現在已經被問了上千次,但這並不幫助我嘿:)我一直在這一個小時。我的形式:Rails路由錯誤的嵌套form_for
= form_for @comment, :url_for => { :action => "create", :controller => "comments"}, :method => :post
我耙路線:
POST /t/:trunk_id/r/:root_id/comments(.:format) {:action=>"create", :controller=>"comments"}
trunk_root_comment GET /t/:trunk_id/r/:root_id/comments/:id(.:format) {:action=>"show", :controller=>"comments"}
錯誤:
undefined method `comments_path' for #<#<Class:0x007fed2c713128>:0x007fed2c71cc78>
如果我的名字空間的形式:
= form_for [:trunk_root, @comment], :url_for => { :action => "create", :controller => "comments"}, :method => :post do |f|
應使路由trunk_root_comments_path ..這是正確的acc奧爾丁的耙路線的..我得到:
No route matches {:controller=>"comments", :format=>nil}
幫助是非常讚賞..一直在尋找這幾個小時..
UPDATE:
感謝您瑞安這樣一個偉大的答案!一個非常清楚的解釋,我只是在'扔東西',現在至少我理解得更好。實際上,我的耙路線中已經有了'trunk_root_comments_path',並且我嘗試了一些你提到的組合,但是我沒有真正地琢磨我錯過了什麼,所以你的幫助。我使用的是Mongo,實際上我沒有Trunk模型,我只有一個名爲@ root.trunk的屬性,雖然我有一個trunk控制器,因此它是我路線的一部分(也許是一個糟糕的主意idk) 。
所以,我想你的TLDR,它說錯誤:
Undefined method 'root_comments_path'
..不會造成幹線模型存在,我想..所以我做了@trunk剛好等於正確的ID與
= form_for [@trunk, @root, @comment] do |f|
?
< - 和我「未定義的方法`politics_root_comments_path」。我盤算好..這可能是有道理..因爲我失敗,我必須一試你最明確的版本:
= form_for @comment, :url => (trunk_root_comments_path(:trunk_id => @root.trunk, :root_id => @root.id)) do |f|
肯定這個工作......所以我不太確定如何做到這一點比這短..對我來說奇怪的是我有另一個嵌套資源「照片」在路線相同的深度級別我可以通過= form_for [:trunk_root,@photo],:html => {:class =>'root_form'} do | f | ..但是出於某種原因,我不能..無論如何,我會說你給我足夠的理解100%,但我認爲我從20%的理解到50%的理解。現在我知道id對路由很重要,並且指定的助手需要訪問它們。我介紹了url_helper是如何工作的,但是需要閱讀更多內容才能真正完成我的想法。我現在也能夠以更長的形式構建適當的路線,至少可以解決這種棘手的情況。所以,謝謝:)
忽略我的答案(至少一段時間:))你的路線如何設置? – jlundqvist