次の構造を持つ単純な Rails に取り組んでいます。
Product
has_and_belongs_to_many :subscribers
Subscriber
has_and_belongs_to_many :products
サブスクライバーが 0 を超える製品であるサブスクライバーを持つすべての製品を取得するにはどうすればよいですか?
def self.has_subscribers
#subscribers > 0
end
次の構造を持つ単純な Rails に取り組んでいます。
Product
has_and_belongs_to_many :subscribers
Subscriber
has_and_belongs_to_many :products
サブスクライバーが 0 を超える製品であるサブスクライバーを持つすべての製品を取得するにはどうすればよいですか?
def self.has_subscribers
#subscribers > 0
end
さて、あなたはやってみましたか、
@product.subscribers.count > 0
だからあなたは次のようなことができます
def has_subscribers?
subscribers.count > 0
end
def self.has_subscribers
Product.joins("LEFT JOIN products_subscribers ON products_subscribers.product_id = products.id").where("products_subscribers.product_id IS NOT NULL")
end
HTH
編集:以下が機能するかどうかはわかりませんが、試してみてください:
def self.has_subscribers Product.joins(:products_subscribers) end をjoins
使用しているため、結合テーブルでと関係があるINNER JOIN
レコードのみを返す必要があります。products
subscribers
編集2:通常、結合テーブルにはモデルがないため、結合テーブルとの結合だけでは機能しない場合があります(実際には機能しない場合があります)。
GROUP
上記は私にとってはうまくいっていますが、結果を忘れていました。
Product.joins("LEFT JOIN products_subscribers ON products_subscribers.product_id = products.id").where("products_subscribers.product_id IS NOT NULL").group("products.id")
あなたがまだ得ているならSubscribers
、それはちょっと奇妙です. 関数とクエリコードを投稿してください。