[英]Overriding default parameters in Ruby on Rails with URL query strings
听起来应该是一个简单的问题,但这是路线:
get 'routes(/:start_system/:end_system(/:result_type))' => 'routes#calculate',
:defaults => { :start_system => 'Jita', :end_system => 'Renyn', :result_type => 'short', :min_sec => -1.0 }
如果我以这种形式提供网址,则默认值会被覆盖(例如,我们可以使用整数代替系统名称):
host/routes/30000001/30001437
但是,我尝试在之后以格式字符串提供更多信息,这是行不通的:
host/routes/30000001/30001437?min_sec=0.5
基本上,默认{{:min_sec => -1.0}永远不会被URL末尾的格式字符串覆盖。 这是设计使然吗?
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 }
可以维持您的设计的另一种方法:
routes.rb
删除min_sec
默认值。 在控制器中实现默认值:
def calculate min_sec = params['min_sec'] || -1.0 ... end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.