У меня есть модель "Компания", которая имеет: id,: имя, а иногда и домен, и есть такие маршруты: если у компании есть: домен, то это / companies /: домен, в противном случае это / companies /: id
В моем файле rout.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
Работает в рельсах 3.0.9 (с mysql 0.2.7), но не в рельсах 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) %>
И здесь, похоже, рельсы не могут найти метод company_path. Но если мы отправим / companies / lala, все будет работать.