使用URL查询字符串覆盖Ruby on Rails中的默认参数

时间:2015-07-31 14:13:54

标签: 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,则会覆盖默认值(例如,我们可以使用系统的整数而不是其名称):

host/routes/30000001/30001437

但是,我试图在格式字符串之后提供更多信息,这不起作用:

host/routes/30000001/30001437?min_sec=0.5

基本上,默认{:min_sec => URL的末尾格式字符串永远不会覆盖-1.0}。这是设计吗?

2 个答案:

答案 0 :(得分:1)

defaults选项仅适用于您在路线中明确指定的参数。

您可以通过修改路线来获得所需的行为:

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 }

答案 1 :(得分:1)

另一种可以保持设计的方法:

  1. min_sec删除routes.rb的默认值。
  2. 在控制器中实现默认值:

    def calculate min_sec = params['min_sec'] || -1.0 ... end