Ошибка в маршрутах после перехода на рельсы 3.1 с рельсов 3.0.9 - PullRequest
1 голос
/ 05 октября 2011

У меня есть модель "Компания", которая имеет: 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, все будет работать.

1 Ответ

0 голосов
/ 05 октября 2011

Вам необходимо передать полные параметры, если вы не используете ресурс.

def company_c_path(c)
  company_path(c.domain.present? ? { :domain => c.domain } : { :id => c.id })
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...