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?

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top