2017-02-19 8 views
0

Ich denke, dass dies eine sehr einfache Frage sein kann, aber ich bin seit über einer Stunde fest, also werde ich es hier werfen und sehen, was beißt.Ich vermeide das Hinzufügen von Benutzer-ID zu jedem Modell

In meiner Rails App haben Benutzer Seiten und Seiten Absätze. Seiten haben eine Beziehung "angle_to" zu Benutzern, und ich muss alle Absätze abrufen, die für einen bestimmten Benutzer als wichtig markiert sind.

Also die Frage ist, verwenden die bereits bestehende Beziehung, die Absätze haben Seiten und Seiten haben Benutzer, wie kann ich das tun?

kann ich nicht tun:

current_user.pages.paragraphs.where(important: true)

weil current_user.pages eine Sammlung zurück, so dass es Fehler, dass es keine Absätze Verfahren auf dieser Sammlung.

Muss ich also einfach ein Benutzerfeld zu Absätzen hinzufügen und dort eine Beziehung herstellen? Damit kann ich tun:

current_user.paragraphs.where(important: true)

Oder ist es eine Möglichkeit zu tun, das zu vermeiden? Danke für jede Hilfe!

Antwort

1

Sie sollten eine has_many :paragraphs, through: :pages Zuordnung zu Ihrem Modell User einrichten. Dadurch wird User#paragraphs erstellt, und Sie können current_user.paragraphs.where(important: true) aufrufen, ohne eine komplexere Abfrage erstellen zu müssen.

Die Details dazu befinden sich in ActiveRecord::Associations.has_manydocuments here.

class User < ApplicationRecord 
    ... 
    has_many :pages 
    has_many :paragraphs, through: :pages 
    ... 
end 

class Page < ApplicationRecord 
    ... 
    has_many :paragraphs 
    belongs_to :user 
    ... 
end 

class Paragraph < ApplicationRecord 
    ... 
    belongs_to :page 
    ... 
end 
+1

ja ja ja, das ist das Nugget, dank –

+0

@PaulHarker Sie sind willkommen:

Ihre Modelle dann etwas aussehen würde! Freue mich zu helfen :) –

Verwandte Themen