0

我正在开发一个应用程序,在该应用程序中,我需要查找用户推荐的用户提交的项目数。

例如 -

User1 推荐了 3 个人(User2、User3、User4),每个用户都提交了 5 篇文章。

我正在尝试找到一种方法来获取 User1 的树中提交的项目的数量(在这种情况下应该是 15)。

我的用户模型如下所示(简化)

class User < ActiveRecord::Base
  # Code for user referrals
  belongs_to :referrer, :class_name => "User"
  has_many :referrals, :class_name => "User", :foreign_key => "referrer_id"
  has_many :items
end

我可以很容易地找出每个用户的计数(User.items.size),但是我很难找到将推荐计数作为一个总和的解决方案。

有任何想法吗?

4

3 回答 3

2

尝试这个:

user = User.find(1)
total_items_size = user.referrals.map(&:items).flatten.size
于 2009-11-08T17:47:26.893 回答
2

您可以使用 select_value 手动运行 SQL 查询:

def referred_items_count
  select_value("select count(*) as referred_items 
  from items inner join users on users.id = items.user_id 
  where users.referrer_id = #{self.id};", "referred_items")
end

好处是它比使用 Ruby 计数更具可扩展性。

于 2009-11-08T20:41:19.267 回答
0

获取 id 为 1 的 User 的所有项目

total = 0
Users.find(1).referrals.each do |refer|
   total += refer.items.size
end
于 2009-11-08T12:13:47.480 回答