2011-10-05 95 views
1

我有一个模型“公司”,它有:id,:name和有时:domain,并且有这样的路线:如果一个公司有:domain,那么它是/公司/:域,否则它的/公司/:ID 有你在我的routes.rb文件这样的路线:从导轨切换到导轨3.1后的路径错误3.0.9

get "/companies/:id(.:format)", :controller => "companies", :action => "show", :as => "company", :constraints => { :id => /\d+/ } 
get "/companies/:domain(.:format)", :controller => "companies", :action => "show", :as => "company" 

还有的在companies_helper.rb生成路由的helper方法:

def company_c_path(c) 
    company_path(c.domain.present? ? c.domain : c.id) 
end 

它在rails 3.0.9(使用mysql 0.2.7)中工作,但不在rails 3.1.0中(mysql> = 0.3)。最后一种情况的问题是

No route matches {:action=>"show", :controller=>"companies"} 

更具体,让我们考虑公司:ID = 1:域=“拉拉”。当我们向/ companies/1发送请求时出现错误。 Rails的成功解析器申请(PARAMS = {:ID => 1}),然后在我看来有

<%= link_to @company.name, company_c_path(@company) %> 

这里似乎轨找不到company_path方法。但是,如果我们发送/公司/拉拉,一切正常。

回答

0

除非您使用资源,否则您需要传递完整选项。

def company_c_path(c) 
    company_path(c.domain.present? ? { :domain => c.domain } : { :id => c.id }) 
end 
+0

谢谢,我补充说,但没有任何变化。轨道3.0.9工程和轨道3.1.0不在/ companies/1路径上。两者均适用于/ companies/lala路径。 – Kasheftin

+0

在控制台中试一下company_path(:id => 10)的方法,看它是否有效。如果是这样,错误在别处。 –