使用Squeel自定义查询两个属性与有序对的相等性

时间:2012-02-23 15:03:14

标签: ruby-on-rails ruby-on-rails-3 activerecord meta-where squeel

我在编写查询时遇到困难,无论是否在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]上已经有一个复合索引,我担心这不会使用该索引,这对我来说是个必需。

是否有更简单的方法来编写这些复合范围?谢谢!

0 个答案:

没有答案