У меня проблемы с получением 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
Это работает, когда я устанавливаю: id явно. Например:
url_for(:controller => 'bar', :id => 'special')
url_for(:controller => 'bar', :id => @foo)
Генерирует правильный URL для special, когда: id явно установлен на 'special', а когда @foo is_special == false. Однако когда @ foo.is_special == true, специальный маршрут не распознается.