У меня возникли проблемы с получением url_for для рендеринга Take to_param при выборе того, какой маршрут использовать.делает url_for использовать to_param при построении маршрута
У меня есть два набора маршрутов, которые используют ту же модель (Foo). Если Foo.is_special, url должен отображаться в/special /: action. Если это не так, оно должно отображаться в /: id /: action. Поскольку это та же модель, я бы хотел, чтобы url_for автоматически узнал, к какому пути привязана карта, в зависимости от is_special.
routes.rb:
map.special 'special/:action', :controller => 'bar', :id => 'special'
map.regular ':id/:action', :controller => 'bar', :id => /\d+/
foo.rb:
def to_param
is_special ? 'special' : id.to_s
end
Это работает, когда я установил: идентификатор в явном виде. Например:
url_for(:controller => 'bar', :id => 'special')
url_for(:controller => 'bar', :id => @foo)
Создает правильный URL для специальной, когда: идентификатор набора явно «специальный», и когда @foo is_special == ложь. Однако, когда @ foo.is_special == true, специальный маршрут не распознается.