1

パッケージ.rb

has_many :deals

Deal.rb

belongs_to package

簡単な質問は、取引数が複数あるすべてのパッケージを取得したいということです。それを行うための最良の方法は何ですか?where(:available_for_purchase => true)self.deals.count > 0

(package.rb)

  class << self
    def available
      where(:available_for_purchase => true)
    end
  end
4

2 に答える 2

8
def self.available
  joins(:deals).where(:available_for_purchase => true).uniq
end

アソシエーションに参加すると、取引なしでdeals削除されます... SQLはここで大変な仕事をしています.Packages

次に使用します:

Package.available
于 2012-11-06T21:51:00.920 に答える
4

カウンターキャッシュを使用して、Package モデルの列として取引数を提供します。これにより、条件に SQL を使用できるようになります。

パッケージ.rb

has_many :deals
def with_deals
  where("deals_count > 0")
end

Deal.rb

belongs_to :package, :counter_cache => true

次に、次のように呼び出すことができます。

Package.with_deals

ここでカウンターキャッシュを設定する方法の例を見ることができます: http://railscasts.com/episodes/23-counter-cache-column

于 2012-11-06T21:45:06.453 に答える