我现在已经被问了上千次,但这并不帮助我嘿:)我一直在这一个小时。我的形式: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