如何使url_for返回斜线参数而不是(?&基础参数)

时间:2016-04-19 04:51:55

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

Rails 2.3.5:

路线:

map.connect ':controller/:action/:sort_key/:sort_order'

选项:

{"controller"=>"sections", "action"=>"list", "params"=>{"sort_key"=>"sect_code", "sort_order"=>"asc"}}

url_for(options)会给我:

/sections/list/sect_code/asc

在Rail 4.2中,

路线:

  get ':controller/:action/:sort_key/:sort_order'

url_for(options)(相同选项)会给我,

/sections/list?sort_key=sect_code&sort_order=asc

这是否意味着这种差异?是否有可能使行为相同?

感谢。

1 个答案:

答案 0 :(得分:0)

该行为是有意的。当你向url_for选项中添加一个参数时,它不是一个控制器,一个动作或一个期望的属性(例如trailing_slash:true),那么url_for帮助器将生成一个字符串,其中的参数附加在' get&#39中;时尚。我不知道任何内置的方法来修改字符串输出变为斜杠而不是获取参数,但由于生成了一个html编码的字符串,你可能会在生成的字符串上使用gsub和regex。

我会创建一个帮助方法来修改url_for方法的结果,如下所示:

def url_for_with_slashes(options=nil)
    url_for(options).gsub(/(\?|&)[a-zA-Z0-9_]+=/, "/")
end

它并非完全傻瓜式的证明,但如果您发现某些东西在网上滑落,您可以随时更新正则表达式。

编辑:在反射时,您只需在routes.rb文件

中为路径指定名称即可
get ':controller/:action/:sort_key/:sort_order', as: 'sort'

...然后使用sort_path(sort_key,sort_order)生成带有斜杠的url