Ruby on rails Rails关联数大于1的情况

Ruby on rails Rails关联数大于1的情况,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.2,Package.rb has_many :deals has_many :deals def with_deals where("deals_count > 0") end Deal.rb belongs_to package belongs_to :package, :counter_cache => true 现在一个简单的问题是,我想得到所有交易数量大于一的套餐。 最好的方法是什么其中(:可供购买=>true)和self.deals.count>0 (package

Package.rb

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

belongs_to package
belongs_to :package, :counter_cache => true
现在一个简单的问题是,我想得到所有交易数量大于一的套餐。 最好的方法是什么<代码>其中(:可供购买=>true)和
self.deals.count>0

(package.rb)

class-true)
终止
终止

我会使用计数器缓存将交易计数作为包模型上的一列提供给您,这样您就可以使用SQL查询条件

Package.rb

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

belongs_to package
belongs_to :package, :counter_cache => true
然后你可以打电话:

Package.with_deals
您可以在此处看到如何设置计数器缓存的示例:

我会使用计数器缓存将交易计数作为包模型上的一列提供给您,这样您就可以使用SQL查询条件

Package.rb

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

belongs_to package
belongs_to :package, :counter_cache => true
然后你可以打电话:

Package.with_deals
您可以在此处看到如何设置计数器缓存的示例:

加入
deals
关联将删除
Packages
而不删除任何交易。。。SQL在这里做着艰苦的工作

然后使用:

Package.available
加入
deals
关联将删除
Packages
而不删除任何交易。。。SQL在这里做着艰苦的工作

然后使用:

Package.available

我得到了错误的包数,而不是3,它返回8?编辑了我的答案,忘记按id分组以删除重复项为什么我不能执行以下操作?Package.available.count?编辑我的答案以使用
uniq
而不是
group
。然后,如果您想要可用包的总数,请使用
Package.available.length
,因为在分组时向SQL询问计数将为您提供每个包的小计。但既然是activerecord查询,为什么我不能使用计数?我可以循环查看结果,为什么计数出错?我得到的包数错误,而不是3,它返回8?编辑了我的答案,忘记按id分组以删除重复项为什么我不能执行以下操作?Package.available.count?编辑我的答案以使用
uniq
而不是
group
。然后,如果您想要可用包的总数,请使用
Package.available.length
,因为在分组时向SQL询问计数将为您提供每个包的小计。但既然是activerecord查询,为什么我不能使用计数?我可以循环查看结果,为什么计数会给出错误?