Rails 3嵌套路由形成问题

时间:2012-07-08 00:10:20

标签: ruby-on-rails ruby ruby-on-rails-3

我一直在仔细检查所有其他问题和答案。

我的表单就是这样开始的:

<% @new_article = company.news.new %>
<%= form_for(@new_article, {:url => [company, @new_article]}) do |news_form| %>

错误是这样的:

Routing Error

No route matches {:action=>"show", :controller=>"news", :company_id=>nil, :id=>2}

Rake路线说:

           company_news_index GET    /companies/:company_id/news(.:format)                                        
                                         {:action=>"index", :controller=>"news"} 
                              POST   /companies/:company_id/news(.:format)                                        
                                         {:action=>"create", :controller=>"news"}
             new_company_news GET    /companies/:company_id/news/new(.:format)                                    
                                         {:action=>"new", :controller=>"news"}
            edit_company_news GET    /companies/:company_id/news/:id/edit(.:format)                               
                                         {:action=>"edit", :controller=>"news"}
                 company_news GET    /companies/:company_id/news/:id(.:format)                                    
                                         {:action=>"show", :controller=>"news"}
                              PUT    /companies/:company_id/news/:id(.:format)                                    
                                         {:action=>"update", :controller=>"news"}
                              DELETE /companies/:company_id/news/:id(.:format)

问题是,它适用于我网站的某个区域。显然它没有正确设置company_id,但是当我手动设置它时,它似乎没有修复任何东西。我觉得我已经尝试了所有解决方案 - 但考虑到它在网站的其他地方工作,我很困惑为什么它不能在一个地方工作。 (公司IS定义 - 在这种情况下它的id是2)。

3 个答案:

答案 0 :(得分:1)

尝试使用

company.news.build

而不是新的。在那之后,你不应该做任何特别的事情:

<% @new_article = company.news.build %>
<%= form_for([company, @new_article]) do |news_form| %>

答案 1 :(得分:0)

即使已定义公司,并通过实例变量传入部分 - 并且对于页面中的其他内容(正常运行)似乎也没问题。当我做类似的事情时:

<% @c = Company.find_by_id(company.id) %>
<% @new_article = @c.news.build %>
<%= form_for([@c, @new_article]) do |news_form| %>

工作正常。很奇怪。

答案 2 :(得分:-1)

你需要一个company.id&lt;%= form_for(@ new_article,{:url =&gt; [company.id,@ new_article]})do | news_form | %GT;