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
答案 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