2016-06-11 21 views
0
  1. Ein Benutzer kann viele Themen unterrichten, und jedes Thema kann viele Lektionen haben.
  2. Ein Benutzer kann an Lektionen teilnehmen, die von anderen Benutzern erstellt wurden.

(1) ist ziemlich einfach, und ich setzte es wie folgt:Schienen - mehrere Beziehungen zwischen Modellen

#user.rb 
has_many :topics 
has_many :lessons, through: :topic 

#topic.rb 
has_many :lessons 

#lesson.rb 
belongs_to :topic 
belongs_to :user 

(2) ist ein many-to-many-Beziehungen, und ich denke, ein Tisch kommen - nennen wir es passt (extra Punkte, die mir helfen, einen besseren Namen zu finden!) - ist erforderlich.

Wenn ich hinzufügen, die folgenden

#user.rb 
. 
. 
has_many :lessons, through: :match 

#lesson.rb 
. 
. 
has_many :users, through: :match 

#match.rb 
belongs_to :lesson 
belongs_to :user 

Ich denke, ich werde eine Fehlermeldung erhalten, da Rails nicht den Unterschied zwischen den beiden Beziehungen beim Aufruf @ user.lessons bekommen kann, zum Beispiel.

Was kann ein korrekter Ansatz sein?

p.s. Ich sehe, dass es viele ähnliche Fragen gibt, aber ich konnte keine richtige Lösung für mein Problem finden.

Antwort

0

Ich denke, Sie sollten die Join-Tabelle user_lessons eher als eine Konvention in Rails für Join-Tabellen sein. Nach Umbenennung, ich glaube, Sie lieber es so haben sollte:

user.rb

has_many :user_lessons 
    has_many :subscribed_lessons, through: :user_lessons, source: :lesson 

Beachten Sie auch, dass Ihr Benutzer

has_many :lessons, through: :topics #not :topic 

Lassen Sie mich wissen, ob das funktioniert.

+0

danke oreoluwa, Ihre Antwort macht viel Sinn. Ich werde es testen und werde es Sie wissen lassen, aber ich denke es ist der richtige Weg. Danke für den Tipp zur Namensgebung, ich werde deinen Rat befolgen. Das fehlende 's' zu den Themen war ein Tippfehler, aber danke, dass du es aufgezeigt hast :) Wenn ich dann etwas wie lesson.subscribed_users brauche, um die Liste der Abonnenten zu sehen, dann denke ich an 'has_many: subscribed_users, through: user_lessons, source :: Benutzer zu Lektion.RB, richtig? – davideghz

+0

Ich denke schon. Beachten Sie, dass Ihre Quelle "Benutzer" und nicht "Benutzer" sein sollte – oreoluwa