在选择要使用的路线时,我无法让 url_for 呈现 to_param 。
我有两组使用相同模型(Foo)的路线。如果 Foo.is_special,则 url 应该映射到 /special/:action。如果不是,它应该映射到 /:id/:action。因为它是相同的模型,我希望 url_for 自动知道要映射到哪个路径,具体取决于 is_special。
路线.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)
当 :id 显式设置为 'special' 并且 @foo is_special == false 时,生成正确的特殊 URL。但是,当 @foo.is_special == true 时,无法识别特殊路线。