2015-04-16 4 views
-1

У меня есть массив различных транзакций, и мне нужно выполнить поиск по массиву для разных имен предприятий. Мне нужен метод поиска, который может найти эти 3 имени.Поиск по массиву case-insensitivly

#<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

Смежные вопросы