繁体   English   中英

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

[英]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 }

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM