Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails url_是否用于构建路由时的_参数_Ruby On Rails_Routes_Custom Routes - Fatal编程技术网

Ruby on rails url_是否用于构建路由时的_参数

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

在选择要使用的路由时,我在获取要渲染的url_时遇到问题,请考虑take to_param

我有两组使用相同模型(Foo)的路由。如果Foo.is_special,则url应映射到/special/:action。如果不是,它应该映射到/:id/:action。因为它是同一个模型,我希望url_自动知道映射到哪个路径,这取决于它的特殊性

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)

当: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'