Rails条件,其中关联has_many计数多于一个

时间:2012-11-06 21:32:40

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

Package.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

2 个答案:

答案 0 :(得分:8)

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

加入deals关联将删除Packages而不进行任何交易...... SQL正在努力工作。

然后使用:

Package.available

答案 1 :(得分:4)

我使用计数器缓存将交易计数作为Package模型上的一列,然后让您使用SQL作为条件。

Package.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