(使用字段选择“按字段对查询”in
clause)
我有一个哈希数组,如下所示:
[ {product_id: 7629, group_id: 4}, {product_id: 8202, group_id: 3} ]
我想返回的是所有的记录Items
与数组中的字段对匹配的表。
在 SQL 中,它将像这样被检索:
SELECT *
FROM items
WHERE (product_id, group_id) IN (VALUES (7629,4), (8202,3))
但我在使用 Rails 时遇到了麻烦.where
条款。这可能吗?
我想不出有什么方法可以在不诉诸 SQL 的情况下做到这一点,即使使用 Arel 也是如此。
由于数组不能被引用,我们必须做一些愚蠢的事情才能仍然允许它被清理。这不是一个great解决方案,但它是一个有效的解决方案。
your_hashes = [ {product_id: 7629, group_id: 4}, {product_id: 8202, group_id: 3} ]
# turn hashes into simple value array
conditions = your_hashes.map { |h| [ h[:product_id], h[:group_id] ] }
=> [[7629, 4], [8202, 3]]
# create a list of "(?)" values that will allow the conditions to be passed in
values = ("(?)," * conditions.length)[0..-2]
=> "(?),(?)"
# use it to look up the values
Model.where("(product_id, group_id) IN (VALUES #{values})", *conditions)
# this is the generated sql:
SELECT "models".* FROM "models" WHERE ((product_id, group_id) IN (VALUES (7629,4),(8202,3)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)