Tabellen mit in Schienen durch Beziehungstabelle
-
29-09-2019 - |
Frage
ich drei Klassen haben; Benutzer, Futtermittel und Einträge. Die Benutzer haben ein oder mehr Feeds und Feeds hat eine oder mehr Einträge:
class Feed < ActiveRecord::Base
has_many :entries
has_many :feeds_users
has_many :users, :through => :feeds_users, :class_name => "User"
end
Class User < ActiveRecord::Base
has_many :feeds_users
has_many :feeds, :through => :feeds_users, :class_name => "Feed"
end
class Entry < ActiveRecord:Base
belongs_to :feed
end
Die User und Feed-Klassen werden durch eine dritte Tabelle bezogen werden:
class FeedsUser < ActiveRecord::Base
belongs_to :user
belongs_to :feed
end
Nun, mein Problem ist, dass ich eine bestimmte Benutzer-Feeds erhalten müssen und jeweils neuesten n Einträge des Feeds. Ich bin das Hantieren mit so etwas wie folgt aus:
u = User.first
Feed.joins(:entries, :users).where(:entries => { :created_at => (Time.now-2.days)..Time.now }, :users => u)
Mein Problem dabei ist, dass dies einige SQL erzeugt, dass versucht zu Abfrage „Benutzer“ auf dem Tisch „Feeds“ -., Die nicht existieren
Wie gehe ich über eine korrekte Abfrage erstellen, die mir alle Feeds und ihre neuesten 10 Einträge für einen bestimmten Benutzer geben kann?
Lösung
Nehmen Sie has_many :feeds_users
. :feeds_users
sollte kein Modell sein.
Sie sollten den Tisch halten, aber einige Rails Magie geht hinter den Kulissen. Wenn Sie eine Tabelle mit dem Namen Feeds und eine Tabelle mit dem Namen Benutzer haben, Rails leitet sich der Name der Tabelle der Nachschau, wenn Sie es anders angeben.
Für Ihr Beispiel:
Class Feed < ActiveRecord::Base
has_many :users
end
Class User < ActiveRecord::Base
has_many :feeds
end
Es wird in der users_feeds
Tabelle für die Beziehung suchen. Wenn es so aussieht:
Class Feed < ActiveRecord::Base
belongs_to :user
end
Class User < ActiveRecord::Base
has_many :feeds
end
Es wäre in der user_feeds
Tabelle für die Beziehung suchen.
Es ist sprachlich korrekt, da viele Benutzer viele Feeds im ersten Beispiel haben werden, und ein Benutzer viele Feeds im zweiten Beispiel haben wird. Das ist auch ein guter Indikator dafür, ob Ihre Beziehung Logik korrekt ist.
Es klingt auch wie Sie die has_and_belongs_to_many
Beziehung statt nur has_many
müssen.
Für eine vollständige heruntergekommenen auf alle Formen der Modell Verbände Besuche die Führung .