Поиск по массиву значений в методе запроса .select - PullRequest
1 голос
/ 17 марта 2020

У меня такой тип поиска:

values = ModelName.find(:all, :conditions => ['attr_id IN (SELECT attr_id FROM srv_type_attr WHERE id IN (?))', serv_objt_attr.collect(&:stya_id)])

Ведьма возвращает мне массив необходимых значений:

[33458, 33438]

Далее мне нужно проверить, существует ли запись с select:

serv_objt_attr.select {|array| array.stya_id == values.collect(&:attr_id).uniq}

Это пример того, о чем я размышляю.

Итак, как это сделать с помощью select, чтобы он просматривал все значения, которые я получаю values.

Я знаю, что мог бы что-то вроде

values.collect(&:attr_id).uniq do |val|
serv_objt_attr.select {|array| array.stya_id == val}
end

Но я не думаю, что это хороший вариант.

Ruby 1.8.7 Рельсы 2.3.4

1 Ответ

1 голос
/ 18 марта 2020

Это хороший случай для оператора пересечения множества:

values = ModelName.find(:all, :conditions => ['attr_id IN (SELECT attr_id FROM srv_type_attr WHERE id IN (?))', serv_objt_attr.collect(&:stya_id)])

values & Set.new(serv_objt_attr.map(&:stya_id)

Вот что делает & :

>> values = [1,2,3]
=> [1, 2, 3]
>> other_array = [1,5,9,3]
=> [1, 5, 9, 3]
>> values & other_array
=> [1, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...