Ruby:为某事寻找哈希

时间:2009-12-13 21:51:57

标签: ruby-on-rails ruby

我正在使用Highrise API和Ruby包装器,但我的问题是(除了让它自己使用API​​的噩梦)我想搜索返回的哈希:

>> Highrise::Person.find(:all).detect{|p| p.name == 'Brandon'}
=> [#<Highrise::Person:0x102a4d2f8 @prefix_options={}, @attri....

我可以这样做,但显然detect以及使用==只会返回一个项目而且必须是完全匹配,如果我想搜索某些内容并且它不是完全匹配,更喜欢它“包含”的价值?例如,如果我在名称的末尾省略“n”,就像这样:

>> Highrise::Person.find(:all).detect{|p| p.name == 'Brando'}
=> nil

显然这会返回nil,但是如何让它返回名称中包含“Brando”的项目?

2 个答案:

答案 0 :(得分:3)

尝试select获取所有匹配的元素,也使用正则表达式而不是相等:

Highrise::Person.find(:all).select{|p| p.name =~ /Brando/i}

答案 1 :(得分:1)

高层:: Person.find的(:所有)。选择{| P | p.name =〜/ Brando /}

如果你想要多个结果。

可以使用相同的块{| p | p.name =〜/ Brando /} with detect to get one element