我有一个模型“公司”,它有:id,:name,有时候:域名,并且有这样的路线:如果公司有:domain那么它是/ companies /:domain,否则就是/ companies /:id 我的routes.rb文件中有这样的路由:
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中生成路线:
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和:domain =“lala”。当我们向/ companies / 1发送请求时出现错误。 Rails成功解析了这个请求(params = {:id => 1}),然后在我的视图中有
<%= link_to @company.name, company_c_path(@company) %>
这里似乎rails无法找到company_path方法。但如果我们发送/公司/ lala,一切正常。
答案 0 :(得分:0)
除非您使用资源,否则您需要传递完整选项。
def company_c_path(c)
company_path(c.domain.present? ? { :domain => c.domain } : { :id => c.id })
end