Rails路由:以编程方式从URL中提取params

时间:2015-01-07 11:54:03

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

我需要以编程方式从URL中提取params,即在调用URL时控制器将接收的哈希值。这不会发生在控制器内部,而是内省工具,因此控制器永远不会运行。我想预测如果控制器运行会发生什么,希望使用相同的API Rails本身正在使用。

例如,给定一个Rails路由/blogs/:id和一个/blogs/123?published=true的URL查询,我想提取{ id: 123, published: true }

使用Rails.application.routes.recognize_path,我可以在此示例中获取id,因为它是路由模式的一部分,但不是额外的CGI参数(published)。我可以手动添加这些,但我想知道是否有适当的API。

2 个答案:

答案 0 :(得分:2)

params哈希包含所有路由参数,包括查询参数。

# Given /blogs/123?published=true
def action
  params[:id] # => 123
  params[:published] # => "true"
end

答案 1 :(得分:1)

您可以解析URL,读取查询字符串并将其转换为哈希值。

u = URI.parse("http://localhost:3000/blogs/213?published=true")
cgi_params = u.query.split('&').map { |e| e.split('=') }.to_h

将它们与使用params

Rails.application.routes.recognize_path合并