Ruby on rails 尝试循环哈希中的项并仅返回某些项

Ruby on rails 尝试循环哈希中的项并仅返回某些项,ruby-on-rails,ruby,loops,hash,Ruby On Rails,Ruby,Loops,Hash,我有下面的函数,它将URL解码为由URL的不同部分组成的散列。例如,在我分配哈希值的第一行之后,我收到以下输出: >> CGI.parse(URI.parse("http://google.com/?foo=bar&baz=hello").query) => {"foo"=>["bar"], "baz"=>["hello"]} 在这个函数中,我试图在键为“p”或“q”时提取值。我基本上只想将散列过滤成我想要的键和值 我的目标是只显示某人搜索的关键字,如br

我有下面的函数,它将URL解码为由URL的不同部分组成的散列。例如,在我分配
哈希值的第一行之后,我收到以下输出:

>> 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
def self.get_search_术语(搜索url)
hash=CGI.parse(URI.parse(URI.encode(search_url)).query)#返回一个hash
关键词=[]
hash.each do|键|
如果键[“q”]!=零| |
键[“p”]!=无

关键词可能是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_术语(搜索url)
myhash=CGI.parse(URI.parse(URI.encode(search_url)).query)
关键词=[]
[“p”,“q”]。每个都有我的钥匙|
如果myhash.has有_键?(mykey)

关键词可能是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_术语(搜索url)
myhash=CGI.parse(URI.parse(URI.encode(search_url)).query)
关键词=[]
[“p”,“q”]。每个都有我的钥匙|
如果myhash.has有_键?(mykey)
关键词一种方法:

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
def self.get_search_术语(搜索url)
hash=CGI.parse(URI.parse(URI.encode(搜索url)).query)
关键词=[]
hash.each do |键、值|
如果键='p'| |键=='q'
关键词一种方法:

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
def self.get_search_术语(搜索url)
hash=CGI.parse(URI.parse(URI.encode(搜索url)).query)
关键词=[]
hash.each do |键、值|
如果键='p'| |键=='q'

关键词更惯用的ruby方式,本质上是一行:

def self.get_search_terms(search_url)
  CGI.parse(URI.parse(URI.encode(search_url)).query).values_at('q','p')
end

如果要消除空参数,请向其添加拒绝空白:

.values_at('q','p').reject(&:blank?)

更为惯用的ruby方式,本质上是一个单行程序:

def self.get_search_terms(search_url)
  CGI.parse(URI.parse(URI.encode(search_url)).query).values_at('q','p')
end

如果要消除空参数,请向其添加拒绝空白:

.values_at('q','p').reject(&:blank?)

谢谢你,布拉德。我对行['p','q']有点困惑。每一行都有| mykey |。你为什么在这里对['p']和['q']都做。这只是一个非常简单的方法。我会更新帖子以展示另一个版本,说得很清楚,希望感谢RadBrad。我对行['p','q']有点困惑。每一行都有| mykey |。你为什么在这里对['p']和['q']都做。这只是一个非常简单的方法。我会更新帖子以显示另一个版本,说得很清楚,希望谢谢你的回答。我将把这个标记为正确的,因为它的代码更干净。谢谢你的回答。我将把这个标记为正确的,因为它的代码更干净。