我在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
映射到单独的数组中。但是,这将使我在顶部提到的所有三个项目都得到解决。
答案 0 :(得分:1)
您必须根据参数在where条件中创建原始SQL
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)
答案 1 :(得分:-1)
获取所有item_id和批次,然后进行查询:
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)