Ruby on rails url_是否用于构建路由时的_参数
在选择要使用的路由时,我在获取要渲染的url_时遇到问题,请考虑take to_param 我有两组使用相同模型(Foo)的路由。如果Foo.is_special,则url应映射到/special/:action。如果不是,它应该映射到/:id/:action。因为它是同一个模型,我希望url_自动知道映射到哪个路径,这取决于它的特殊性 routes.rb:Ruby on rails url_是否用于构建路由时的_参数,ruby-on-rails,routes,custom-routes,Ruby On Rails,Routes,Custom Routes,在选择要使用的路由时,我在获取要渲染的url_时遇到问题,请考虑take to_param 我有两组使用相同模型(Foo)的路由。如果Foo.is_special,则url应映射到/special/:action。如果不是,它应该映射到/:id/:action。因为它是同一个模型,我希望url_自动知道映射到哪个路径,这取决于它的特殊性 routes.rb: map.special 'special/:action', :controller => 'bar', :id => 'sp
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为_special==false时,为special生成正确的url。但是,当@foo.is_special==true时,特殊路由无法识别 是,将调用to_param将@foo转换为字符串。你确定没有人叫它吗?也许问题出在别的地方。在控制台中尝试以确保。要在控制台中测试路由,可以首先输入
包括ActionController::UrlWriter;默认的\u url\u选项[:host]=“localhost:3000”不确定这是否是预期的行为,但这是有效的:
map.special ':id/:action', :controller => 'bar', :id => 'special'
而不是
map.special 'special/:action', :controller => 'bar', :id => 'special'