如何从Rails字符串中获取一些特定值?

时间:2014-01-31 17:31:51

标签: ruby-on-rails string

我想从下面的Rails字符串中获取一些特定值,这些是两个字符串。

 1. "http://localhost:3000/admin/shops/assign_shoes?id=50&page=1"

 2. "http://localhost:3000/admin/shops/assign_shoes?id=50"

我总是需要“id”的值,即“50”。无论字符串

中有多少参数

作为查询字符串。

实际上,这些字符串是 request.referer

的值

任何有效的方法?

由于

3 个答案:

答案 0 :(得分:4)

以下是其中一种方式:

require 'uri'
require 'cgi'

uri = URI.parse("http://localhost:3000/admin/shops/assign_shoes?id=50&page=1")
# => #<URI::HTTP:0x000001018dc5c8 URL:http://localhost:3000/admin/shops/assign_shoes?id=50&page=1> 

uri_params = CGI.parse(uri.query)
# => {"id"=>["50"], "page"=>["1"]} 

uri_params["id"].first #=> "50" - NOTE: this will be a String!!

但是,我更喜欢使用正则表达式的答案。

答案 1 :(得分:2)

使用正则表达式。

id = /\/admin\/shops\/assign_shoes\?id=(\d+)/.match(request.referer)[1]

答案 2 :(得分:1)

有几种不同的方法可以做到这一点,我所知道的常见方法是使用URI class解析字符串,并使用CGI class来提取查询参数,如下所示: / p>

uri = URI.parse(request.referer)
parsed_query = CGI::parse(uri.query).symbolize_keys
id_value = parsed_query[:id].first

注意.first,因为查询参数的值被解析为数组。此外,密钥被解析为字符串,因此为了方便和一致,我将包括symbolize_keys