我有以下函数,它将URL解码成由URL的不同部分组成的散列。例如,在我赋值hash
的第一行之后,我收到以下输出:
>> CGI.parse(URI.parse("http://google.com/?foo=bar&baz=hello").query)
=> {"foo"=>["bar"], "baz"=>["hello"]}
在这个函数中,如果键是"p“或"q”,我会尝试拉取值。从本质上讲,我希望将散列过滤成我想要的键和值。
我的目标是只显示人们搜索的关键字,比如brick
或cement
。
下面是我的函数:
def self.get_search_terms(search_url)
hash = CGI.parse(URI.parse(URI.encode(search_url)).query) #returns a hash
keywords = []
hash.each do |key|
if key["q"] != nil ||
key["p"] != nil
keywords << key
end
end
keywords
end
发布于 2012-07-24 00:26:20
一种方法是:
def self.get_search_terms(search_url)
hash = CGI.parse(URI.parse(URI.encode(search_url)).query)
keywords = []
hash.each do |key, value|
if key == 'p' || key == 'q'
keywords << value
end
end
keywords
end
发布于 2012-07-24 02:09:01
更惯用的ruby方式,本质上是一个一行:
def self.get_search_terms(search_url)
CGI.parse(URI.parse(URI.encode(search_url)).query).values_at('q','p')
end
如果您要消除空参数,请在其中添加一个reject空白:
.values_at('q','p').reject(&:blank?)
发布于 2012-07-24 00:13:01
可能是100种方法中的一种吧!
def self.get_search_terms(search_url)
myhash = CGI.parse(URI.parse(URI.encode(search_url)).query)
keywords = []
["p","q"].each do |mykey|
if myhash.has_key?(mykey)
keywords << myhash[mykey]
end
end
keywords
end
或者也许
def self.get_search_terms(search_url)
myhash = CGI.parse(URI.parse(URI.encode(search_url)).query)
keywords = []
mykeywords = ["p","q"]
mykeywords.each do |mykey|
if myhash.has_key?(mykey)
keywords << myhash[mykey]
end
end
keywords
end
在这两个版本中,您要查找的关键字列表都是初始循环。您可以使用以下命令隐式迭代从URI提取的散列:
myhash.has_key?
这将迭代我的散列,如果它包含键,则将键的值广告到关键字。
https://stackoverflow.com/questions/11622276
复制相似问题