2

我在编写查询时遇到困难,无论是否使用 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] 的复合索引,恐怕这不会使用该索引,这将是我的要求。

有没有更简单的方法来编写这些复合作用域?谢谢!

4

0 回答 0