SQLであるかどうかにかかわらず、クエリを作成するのに苦労していますが、gemSqueelを使用して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)] }
私がそれを行うことを考えることができる唯一の方法は、いくつかの区切り文字で2つのIDを連結する列を追加するselect呼び出しでスコープを作成し、それに基づいて検索することです。
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]に複合インデックスがありますが、これではそのインデックスが使用されないのではないかと心配しています。これは私にとって要件となるでしょう。
これらの複合スコープを作成する簡単な方法はありますか?ありがとう!