从rails 3.0.9切换到rails 3.1后的路由出错

时间:2011-10-05 14:43:07

标签: routes ruby-on-rails-3.1

我有一个模型“公司”,它有: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,一切正常。

1 个答案:

答案 0 :(得分:0)

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

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