に私は2つのモデル、Facility
とCategory
持って一致した参加:Railsの4 - クエリは、すべての配列
class Facility < ActiveRecord::Base
has_and_belongs_to_many :categories
end
class Category < ActiveRecord::Base
has_and_belongs_to_many :facilities
end
は私がname
で、三つの可能なCategory
レコードを持って言ってやるがいい。 "カテゴリーA"、 "カテゴリーB" を、そして「カテゴリC」。
にあるすべてのFacility
レコードを「カテゴリA」と「カテゴリB」の両方で取得したいと考えています。
私の最新のクエリは次のとおりです。次のSQLを生成
Facility.joins(:categories).merge(Category.where(Category.arel_table[:name].matches_all(["Category A", "Category B"])))
:
SELECT "facilities".* FROM "facilities" INNER JOIN "categories_facilities" ON "categories_facilities"."facility_id" = "facilities"."id" INNER JOIN "categories" ON "categories"."id" = "categories_facilities"."category_id" WHERE ("categories"."name" ILIKE 'Category A' AND "categories"."name" ILIKE 'Category B')
これは結果を返しません。
純粋なRuby(例:Facility.all.select ...
)を使用すると、少なくとも1つの「カテゴリA」と「カテゴリB」の両方に属するデータベースにFacility
が少なくとも1つあることがわかります。
このクエリは、Railsでもarelを使っても実行できますか?