以下のように、一致する3つのカテゴリすべて、2つのカテゴリすべて、および1つのカテゴリすべてを検索します。
def self.three_matching_cat(rel)
cats = rel.prefs.map {|p| p.category_id}
self.where(:category_id => cats).group(:name).having("count(*) >2").map {|p| p.name}
end
結果の総数を10に制限しますが、3つの一致するカテゴリを持つすべての結果が返されることを確認し、合計10の結果が見つかるまで検索を続行したいと思います。
ありがとうございました!