我需要以编程方式从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。
答案 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
合并