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)は簡単にわかりますが、紹介数を1つの合計として取得するための解決策を見つけるのに苦労しています。

何か案は?

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のユーザーのすべてのアイテムを取得します

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