试图从两级深度关联中找到项目计数,有什么想法吗?

发布于 2024-08-10 14:55:00 字数 524 浏览 5 评论 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),但我无法找到一种解决方案来将推荐计数作为一个总和。

有什么想法吗?

I am working on an application where I need to find the count of submitted items by users that have been referred by a user.

For Example -

User1 has referred 3 people (User2, User3, User4) and each of those users has submitted 5 articles.

I am trying to find a way to get the count of submitted items in User1's tree (should be 15 in this case).

My user model looks like the following (simplified)

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

I can find out the count for each user easily (User.items.size), but I am having trouble finding a solution to get the referral counts as one sum.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

別甾虛僞 2024-08-17 14:55:00

试试这个:

user = User.find(1)
total_items_size = user.referrals.map(&:items).flatten.size

Try this:

user = User.find(1)
total_items_size = user.referrals.map(&:items).flatten.size
无所的.畏惧 2024-08-17 14:55:00

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

You can use select_value to manually run the SQL query:

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

The benefit is that it is a lot more scalable than using Ruby to count.

南…巷孤猫 2024-08-17 14:55:00

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

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

Get all items of User with id of 1

total = 0
Users.find(1).referrals.each do |refer|
   total += refer.items.size
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文