Versuchen Sie, eine Anzahl von Elementen aus einer tiefen Vereinigung von zwei Ebenen zu finden, irgendwelche Ideen?

StackOverflow https://stackoverflow.com/questions/1696119

Frage

Ich arbeite an einer Anwendung, in der ich die Anzahl der eingereichten Elemente von Benutzern finden muss, die von einem Benutzer verwiesen wurden.

Zum Beispiel -

User1 hat 3 Personen (User2, User3, User4) verwiesen und jeder dieser Benutzer hat 5 Artikel übermittelt.

Ich versuche einen Weg zu finden, um die Anzahl der eingereichten Elemente in User1's Tree zu erhalten (sollte in diesem Fall 15 sein).

Mein Benutzermodell sieht aus wie das folgende (vereinfacht)

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

Ich kann die Anzahl für jeden Benutzer problemlos herausfinden (user.items.size), aber ich habe Probleme, eine Lösung zu finden, um die Empfehlungszählungen als eine Summe zu erhalten.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Versuche dies:

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

Andere Tipps

Sie können Select_Value verwenden, um die SQL -Abfrage manuell auszuführen:

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

Der Vorteil ist, dass es viel skalierbarer ist, als Ruby zum Zählen zu verwenden.

Holen Sie sich alle Benutzerelemente mit ID von 1

total = 0
Users.find(1).referrals.each do |refer|
   total += refer.items.size
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top