Ruby on rails 使用URL查询字符串覆盖RubyonRails中的默认参数
这听起来应该是一个简单的问题,但以下是路线:Ruby on rails 使用URL查询字符串覆盖RubyonRails中的默认参数,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,这听起来应该是一个简单的问题,但以下是路线: get 'routes(/:start_system/:end_system(/:result_type))' => 'routes#calculate', :defaults => { :start_system => 'Jita', :end_system => 'Renyn', :result_type => 'short', :min_sec => -1.0 } 如果我以这种形式给出URL,默认值
get 'routes(/:start_system/:end_system(/:result_type))' => 'routes#calculate',
:defaults => { :start_system => 'Jita', :end_system => 'Renyn', :result_type => 'short', :min_sec => -1.0 }
如果我以这种形式给出URL,默认值将被覆盖(例如,我们可以对系统使用整数而不是它们的名称):
但是,我尝试在之后以字符串格式提供更多信息,但这不起作用:
host/routes/30000001/30001437?min_sec=0.5
基本上,默认的{:min_sec=>-1.0}永远不会被URL末尾的格式字符串覆盖。这是设计的吗?默认值选项仅适用于您在路由中明确指定的参数 通过如下方式修改路线,您可以获得所需的行为:
get 'routes(/:start_system/:end_system(/:result_type)(/:min_sec))' => 'routes#calculate',
defaults: { start_system: 'Jita', end_system: 'Renyn', result_type: 'short', min_sec: -1.0 }
维护您的设计的另一种方法:
routes.rb
中删除min_sec
的默认值def计算
min_sec=参数['min_sec']||-1.0
...
结束
谢谢你的解决方案。我将把另一个标记为答案,但这仅仅是因为它在技术上是正确的答案。这就是我要用的。很高兴能帮忙,谢谢投票。FWIW我认为正确的答案是符合海报要求的,但我可以不打勾:)。不过,公平地说,这个答案鼓励我为rails文档编写错误报告,因此它符合我的要求,可能会导致文档中的一些更改。感谢您提供的信息。路由指南()中没有100%清楚,但似乎您是正确的。
get 'routes(/:start_system/:end_system(/:result_type)(/:min_sec))' => 'routes#calculate',
defaults: { start_system: 'Jita', end_system: 'Renyn', result_type: 'short', min_sec: -1.0 }