1

次の構造を持つ単純な Rails に取り組んでいます。

    Product
    has_and_belongs_to_many :subscribers

    Subscriber

    has_and_belongs_to_many :products

サブスクライバーが 0 を超える製品であるサブスクライバーを持つすべての製品を取得するにはどうすればよいですか?

def self.has_subscribers
   #subscribers > 0
end
4

3 に答える 3

3

さて、あなたはやってみましたか、

@product.subscribers.count > 0

だからあなたは次のようなことができます

def has_subscribers?
  subscribers.count > 0 
end
于 2013-10-17T12:44:48.760 に答える
0
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レコードのみを返す必要があります。productssubscribers

編集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、それはちょっと奇妙です. 関数とクエリコードを投稿してください。

于 2013-10-17T12:45:16.707 に答える