ruby 如何在Rails中从URL获取查询字符串

kcwpcxri  于 2023-03-22  发布在  Ruby
关注(0)|答案(4)|浏览(100)

有没有一种方法可以在Rails中获取传递的URL字符串中的查询字符串?
我想传递一个URL字符串:

http://www.foo.com?id=4&empid=6

如何获得idempid

ma8fv8wu

ma8fv8wu1#

如果你有一个字符串中的URL,那么使用URI和CGI将其分开:

require 'cgi'

url    = 'http://www.example.com?id=4&empid=6'
uri    = URI.parse(url)
params = CGI.parse(uri.query)
# params is now {"id"=>["4"], "empid"=>["6"]}

id     = params['id'].first
# id is now "4"

请使用标准库来处理这些东西,不要尝试自己使用正则表达式。
另请参阅下面Quv关于Rack::Utils.parse_query的评论。
参考文献:

  • CGI.parse
  • URI.parse
    更新:这些天我可能会使用Addressable::Uri而不是标准库中的URI
require "addressable/uri"

url = Addressable::URI.parse('http://www.example.com?id=4&empid=6')
url.query_values                  # {"id"=>"4", "empid"=>"6"}
id    = url.query_values['id']    # "4"
empid = url.query_values['empid'] # "6"
yb3bgrhw

yb3bgrhw2#

vars = request.query_parameters
vars['id']
vars['empid']

等等。

rjzwgtxy

rjzwgtxy3#

在Ruby on Rails的控制器方法中,URL参数在一个名为params的散列中可用,其中的键是参数名称,但作为Ruby“符号”(即前缀为冒号)。因此在您的示例中,params[:id]等于4params[:empid]等于6
我建议阅读一个好的Rails教程,它应该包括像这样的基础知识。Here的一个例子-谷歌将出现更多:

isr3a4wc

isr3a4wc4#

Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}

引用自:Parse a string as if it were a querystring in Ruby on Rails
像rails控制器那样解析查询字符串。嵌套查询,通常通过表单字段名,像这样:name="awesome[beer][chips]" # => "?awesome%5Bbeer%5D%5Bchips%5D=cool",把'sliced-and-diced'变成一个很棒的散列:{"awesome"=>{"beer"=>{"chips"=>nil}}}
https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L90

相关问题