我在编写查询时遇到困难,无论是否在SQL中,但我希望能够使用gem Squeel在ruby中编写它。基本上,我有一个班级:
class Article < ActiveRecord::Base
belongs_to :genre
belongs_to :publisher
...
end
我想要一个范围,它接受格式为(genre_id, publisher_id)
的有序对数组,并输出一个ActiveRecord::Relation
,其中包含所有类型的记录,发布者对等于传入的对。< / p>
基本上,我想要Article.where{ genre_id.eq_any [1, 5, 76] }
,除了一个属性,我想要它在一对属性上:
Article.where{ genre_id_publisher_id.eq_any [(1,2), (1,4), (2, 4)] }
我能想到的唯一方法就是使用select调用创建一个范围,该调用会添加一个列,该列可以是两个id与一些分隔符的串联,然后根据它进行搜索:
Article.select(*,
"#{genre_id}-#{publisher_id}" as genre_publisher_pair).where(
genre_publisher_pair.eq_any ["1-2", "1-4", "2-4"])
然而,这似乎是太多的开销。我在[genre_id,publisher_id]上已经有一个复合索引,我担心这不会使用该索引,这对我来说是个必需。
是否有更简单的方法来编写这些复合范围?谢谢!