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

Pra*_*idu 54 ruby ruby-on-rails ruby-on-rails-3

有没有办法在Rails中传递的URL字符串中获取查询字符串?

我想传递一个URL字符串:

http://www.foo.com?id=4&empid=6
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得idempid

mu *_*ort 84

如果您在字符串中有URL,则使用URI和CGI将其拆分:

url    = 'http://www.foo.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"
Run Code Online (Sandbox Code Playgroud)

请使用标准库来处理这些内容,不要尝试使用正则表达式自行完成.

参考文献:

  • 虽然这个答案有很多,但我不喜欢它总是返回值"数组".或者,我们可以选择`Rack :: Utils.parse_query(URI(url).query)`. (8认同)

Rus*_*ell 29

在Ruby on Rails控制器方法中,URL参数在调用的哈希中可用params,其中键是参数名称,但是作为Ruby"符号"(即以冒号为前缀).所以在你的例子中,params[:id]将等于4并且params[:empid]相等6.

我建议阅读一本好的Rails教程,该教程应该涵盖这样的基础知识.是一个例子 - 谷歌会出现更多:


val*_*alk 27

vars = request.query_parameters
vars['id']
vars['empid']
Run Code Online (Sandbox Code Playgroud)

等等..

  • 对于Rails域,这是最好的答案 (3认同)
  • 不,这不是 Rails 的最佳答案。OP 要求解析 *String URL*,这个答案假设上下文中有“request”,就像控制器一样。 (2认同)

SoA*_*Man 15

Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}
Run Code Online (Sandbox Code Playgroud)

引自: 解析一个字符串,好像它是Ruby on Rails中的一个查询字符串

按照rails控制器的方式解析查询字符串.嵌套查询,通常通过表单字段名称,如这个lil guy : name="awesome[beer][chips]" # => "?awesome%5Bbeer%5D%5Bchips%5D=cool",将'切片和切块'变成一个很棒的哈希:{"awesome"=>{"beer"=>{"chips"=>nil}}}

http://rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_query https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L90

  • 这应该是公认的答案.它比CGI.parse更容易使用.谢谢!! (2认同)