2015-04-16 39 views
-1

我有一个不同的事务数组,我需要通过数组搜索不同的业务名称。我需要一个可以找到这3个名字的搜索方法。通过数组搜索不区分大小写

#<Transaction:0xdf38664 @id="kZB3Y63qBvSDK5eM8K3ESqQDLbpzEZfj19wje", @account="ODaJY8Jza5cBgj7XDg3euOoR7ogrjeCMQZPed", @amount=189.85, @name="DIRECTV", @meta={"is_risky"=>false, "location"=>{}}, @location=nil, @pending=false, @score={"location"=>{}, "name"=>1}, @type={"primary"=>"place"}, @category=["Service", "Cable"], @category_id="18009000">] 

我的搜索现在是这样的:

@transactions = @user.transactions.find_all { |t| t.name.include? 'comcast') } 

但这只能找到名字的情况下专门

交易可以有像任何一个名字: “名”:“DirecTV公司“; “name”:“directv”; “name”:“DIRECTV”

我需要一种方法,可以通过同名搜索查找所有这3个名称。

我以为casecmp但只返回一个数字而不是数组项。除非有办法使用casecmp来返回事务数组,但我不知道如何。

+0

Downcase它,然后比较? –

+0

你使用的是什么数据库后端? – kobaltz

+0

MongoidDB是我的数据库 – SupremeA

回答

1

如果这是关系ActiveRecord模型,你应该把它看作出于性能

@user.transactions.where "lower(name) IN (?)", ["comcast", "directv", "somethingelse"] 

如果它真的是一个数组,你可以做

@user.transactions.find_all {|t| t.name.downcase =~ /comcast|directv|somethingelse/ } 
+0

第二种方法做到了!谢谢! – SupremeA

+0

顺便说一句@SupremeA第二种方法依赖于正则表达式。对他们至少有粗略的知识总是一个好主意 – Mario

+0

好的,我会研究它;虽然我听到人们说正则表达式比较慢,但我并不关心速度 – SupremeA