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 }