У меня есть модель Contact
, к которой я хочу получить доступ через URL в URL, поэтому я переопределил to_param
следующим образом:
def to_param
"#{self.id}-#{full_name.parameterize}"
end
Я использую стандартные, спокойные ресурсы:
resources :contact
Это работает как ожидалось. Помощники пути возвращают зашифрованные URL-адреса. И URL-адреса правильно направляются на контроллер. Пока все хорошо.
Проблема в том, что хотя слаг направлен правильно, обновление спецификаций маршрутизации для отражения изменений приводит к сбою спецификаций.
например. эта спецификация не работает:
get("/contacts/1-john-smith").should route_to("contacts#show", :id => "1")
Оригинальная версия проходит:
get("/contacts/1").should route_to("contacts#show", :id => "1")
Что-то здесь не совсем складывается. Почему спецификация не работает, когда URL-адрес разрешается правильно в браузере? И почему изменение to_param
не нарушает первоначальный URL?
Что более важно, как я могу изменить объявление маршрутизации, чтобы спецификация прошла? Могу ли я сделать это с помощью декларации resources
? или я должен определить эти маршруты вручную?