Как запросить записи с массивом пар атрибутов? - PullRequest
0 голосов
/ 05 июня 2019

В моем приложении Rails есть модель Product с несколькими атрибутами, включая item_id и batch.Если я хочу получить один Product, я могу использовать это:

Product.find_by(item_id: 'ITEM001', batch: `05-2019`) 

Но у меня есть массив ['item_id', 'batch'], например:

[
  ['ITEM001', '05-2019']
  ['ITEM001', '04-2019']
  ['ITEM002', '04-2019']
]

Как получить все продукты, соответствующие парам атрибутов в массиве?

Модель продукта использует item_id и batch в качестве составного ключа.Сочетание этих двух атрибутов делает продукт уникальным.

Пример сценария

Предположим, мне нужны только следующие результаты из вышеупомянутых записей:

[
  ['ITEM001', '05-2019']
  ['ITEM002', '04-2019']
]

Я думал об этом:

Product.where(item_id: ['ITEM001', 'ITEM002'], batch: ['05-2019', '04-2019'])

путем сопоставления item_id и batch в отдельных массивах.Но это даст мне все три предмета, которые я упомянул сверху.

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Вы должны создать необработанный SQL в условии where на основе параметров

value_array = [
  ['ITEM001', '05-2019'],
  ['ITEM001', '04-2019'],
  ['ITEM002', '04-2019']
]


query = value_array.map { |ele| ele.join('\' AND batch = \'').prepend('item_id = \'') + '\'' }.join(' OR ')


Product.where(query)
0 голосов
/ 05 июня 2019

Получить все item_ids и партии, а затем сделать запрос:

array = [['ITEM001', '05-2019'], ['ITEM001', '04-2019'], ['ITEM002', '03-2019']]

item_ids = array.map { |arr| arr.first } # ["ITEM001", "ITEM001", "ITEM002"]
batches = array.map { |arr| arr.last } # ["05-2019", "04-2019", "03-2019"]

Product.where(item_id: item_ids, batch: batches)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...