这听起来应该是一个简单的问题,但这里的路线是:
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}。这是设计吗?
答案 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)
另一种可以保持设计的方法:
min_sec
删除routes.rb
的默认值。在控制器中实现默认值:
def calculate
min_sec = params['min_sec'] || -1.0
...
end