我在编写查询时遇到困难,无论是否使用 SQL,但我希望能够使用 gem Squeel 用 ruby 编写它。基本上,我有一堂课:
class Article < ActiveRecord::Base
belongs_to :genre
belongs_to :publisher
...
end
我想要一个范围,它接收格式的有序对数组(genre_id, publisher_id)
并输出一个ActiveRecord::Relation
包含所有类型的记录,发布者对等于传入的对。
基本上,我想要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] 的复合索引,恐怕这不会使用该索引,这将是我的要求。
有没有更简单的方法来编写这些复合作用域?谢谢!