1

包.rb

has_many :deals

交易.rb

belongs_to package

现在简单的问题是我想获得所有交易数量超过一个的包裹。最好的方法是什么?where(:available_for_purchase => true)self.deals.count > 0

(包.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协会将Packages无需任何交易即可移除... SQL 正在这里做着艰苦的工作。

然后使用:

Package.available
于 2012-11-06T21:51:00.920 回答
4

我将使用计数器缓存将交易计数作为 Package 模型上的列提供给您,然后您可以使用 SQL 作为条件。

包.rb

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

交易.rb

belongs_to :package, :counter_cache => true

然后你可以打电话:

Package.with_deals

您可以在此处查看如何设置计数器缓存的示例: http ://railscasts.com/episodes/23-counter-cache-column

于 2012-11-06T21:45:06.453 回答