mehrere Verknüpfungen mit activerecord in rails
Ich bin den Aufbau einer kleinen twitter-Stil microblogging-Dienst, wo Benutzer kann nach anderen Benutzern und bekommen Sie einen feed Ihrer Nachrichten
Habe ich die folgenden Modelle:
class Follow < ActiveRecord::Base
belongs_to :follower, :class_name => "User"
belongs_to :followee, :class_name => "User"
end
class User < ActiveRecord::Base
has_many :follows, :foreign_key => 'follower_id',
:class_name => 'Follow'
has_many :followers, :through => :follows
has_many :followed, :foreign_key => 'followee_id',
:class_name => 'Follow'
has_many :followees, :through => :followed
has_many :messages
end
class Message < ActiveRecord::Base
belongs_to :user
end
Erhalten Sie einen feed für die aktuellen user, ich möchte führen Sie die folgende SQL-Abfrage:
SELECT * FROM follows JOIN users JOIN messages WHERE follows.follower_id = current_user.id AND follows.followee_id = users.id AND users.id = messages.user_id;
Was ist die richtige ActiveRecord Weg, dies zu tun?
InformationsquelleAutor Shalmanese | 2009-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, was du suchst, aber hier ist mein Vorschlag:
Ich nehme an, Sie haben andere Zwecke, für die Folgen Klasse, ansonsten sehe ich nicht den Zweck.
Den "richtigen Weg" (D. H. meine völlig subjektive Weise) zu tun, es wäre tatsächlich so etwas wie dieses:
Dann erstellen Sie die folgende Tabelle:
Und Sie sind gesetzt:
Aber aus was ich es machen, werden Sie wollen, um alle Nachrichten aus allen Followern gleichzeitig.
Dies sollte möglich sein, zu erreichen durch hinzufügenden Benutzer Klasse, aber ich weiß nicht, wie richtig, dass die Weg wäre. Oder könnte es möglich sein, zu erreichen mit der association extensions aber da kann ich nicht wirklich geben dafür Beispiele.
Update:
Durch ändern der :class_name, Sie assoziieren es mit der
Message.id
, glaube nicht, dass es so nicht richtig sein, in dieser Art und Weise.So das nur "schöne" option ist, um durch die User-Klasse, wie im ersten Beispiel.
Die nur andere Optionen, die ich sehen kann, ist entweder der Verein Erweiterungen (die ich nicht geben kann Sie ein Beispiel für) oder vielleicht verwenden Sie ein finder-Anweisung.
Werden Sie wahrscheinlich haben, um anzupassen, die sql-Anweisung bekommen alles zu funktionieren, aber man sollte zumindest das Bild zu bekommen 🙂
InformationsquelleAutor Jimmy Stenke
Keijro Anordnung besser funktionieren würde, obwohl, wenn Sie müssen die Tabelle Folgen, dann führen Sie die SQL-Abfrage wie folgt angegeben:
InformationsquelleAutor insane.dreamer