我目前首先获取某个用户的所有好友,然后将数组的大小作为好友的数量。我担心的是,因为每次我从数据库中检索所有朋友的信息时,它可能(或明显)效率低下。所以我想知道是否有一种方法可以在不获取任何其他信息的情况下有效地查询某个用户的好友数量?
发布于 2013-06-11 22:47:20
如果您的关系声明正确,那么您应该能够执行user.friends.count以生成DB级计数。
在我的控制台中,可以看到SQL查询生成的 (Drug has_many :details和DrugDetail belongs_to :drug):
irb(main):003:0> Drug.first.details
Drug Load (0.7ms) SELECT "drugs".* FROM "drugs" LIMIT 1
DrugDetail Load (1.9ms) SELECT "drug_details".* FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> []
irb(main):004:0> Drug.first.details.count
Drug Load (0.7ms) SELECT "drugs".* FROM "drugs" LIMIT 1
(0.6ms) SELECT COUNT(*) FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> 0
irb(main):006:0> Drug.first.details.to_a.size
Drug Load (2.1ms) SELECT "drugs".* FROM "drugs" LIMIT 1
DrugDetail Load (0.5ms) SELECT "drug_details".* FROM "drug_details" WHERE "drug_details"."drug_id" = 1771
=> 0在你的例子中是,如果你有这样的关系:
User has_many :friends
Friend belongs_to :user然后,这应该在DB级执行,并且比您的第一段代码更快:
User.first.friends.counthttps://stackoverflow.com/questions/17046809
复制相似问题