Frage

Ich habe Rails-Anwendung, die eine Liste von Benutzern hat. Ich habe verschiedene Beziehungen zwischen den Nutzern, zum Beispiel arbeitete mit, Freund, bevorzugt. Wenn Auflistung der Benutzer muss ich entscheiden, ob der aktuelle Benutzer einen bestimmten Benutzer zu seinen Freunden hinzufügen können.

     -if current_user.can_request_friendship_with(user)
      =add_to_friends(user)
    -else
      =remove_from_friends(user)

   -if current_user.can_request_worked_with(user)
      =add_to_worked_with(user)
    -else
      =remove_from_worked_with(user)

Die can_request_friendship_with (Benutzer) sieht aus wie:

  def can_request_friendship_with(user)
   !self.eql?(user) && !self.friendships.find_by_friend_id(user)
  end

Mein Problem ist, dass diese Mittel in meinem Fall 4 Abfrage pro Benutzer. 10 Benutzer Listing Mittel 40 Abfrage. Kann ich das irgendwie eifrig Last?

War es hilfreich?

Lösung

Lassen Sie uns wir random_users bekommen haben und current_user
so non_firends = random_users - current_user.freindships in zwei Abfragen alle non_friends von den Benutzern Abfrage zurückkehren wird.

Eigentlich können Sie alle Ihre Freunde vorzuladen und zu verwenden include? Methode für Freundschaften Array:

@friendships = current_user.friendships

def can_request_friendship_with(user)
  !self.eql?(user) && @friendships.include? user
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top