代码之家  ›  专栏  ›  技术社区  ›  Dean

试图从两个层次的深度关联中找到一个项目的数量,有什么想法吗?

  •  0
  • Dean  · 技术社区  · 16 年前

    我正在处理一个应用程序,在该应用程序中,我需要查找已被用户引用的用户提交项目的计数。

    例如:

    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),但是我很难找到一个解决方案来将引用计数为一个和。

    有什么想法吗?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Alex Kurkin    16 年前

    试试这个:

    user = User.find(1)
    total_items_size = user.referrals.map(&:items).flatten.size
    
        2
  •  2
  •   Omar Qureshi    16 年前

    可以使用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计数更具可扩展性。

        3
  •  0
  •   Trevor    16 年前

    获取ID为1的用户的所有项目

    total = 0
    Users.find(1).referrals.each do |refer|
       total += refer.items.size
    end