2010-11-25 20 views
0

Hey Leute. Ich habe folgende Modelle:Rails Model Association Verwirrung

  • Kategorie
  • Ereignis
  • Schloss
  • Artikel
  • Website
  • Benutzer

Events im Grunde ein "log Punkt" sind. Mit anderen Worten, sie werden speichern, welche Aktion unter welcher Item um was User in was Category durchgeführt wurde. Als ich darüber nachdachte, dachte ich natürlich, dass es "einen Benutzer hat", "hat eine Kategorie", "hat einen Gegenstand" und so weiter. Dies würde jedoch bedeuten, dass es einen fremden Schlüssel für die Event in einer gegebenen User Zeile geben würde, aber das ist nicht was ich will. Ich mag die Fremdschlüssel in der Event Reihe, da die Event gerade ist, die Informationen darüber, was User, was Category usw.

Also mein Verständnis ist, dass ich stattdessen soll sagen, dass ein Event „zu einem Benutzer gehört“, "gehört zu einer Kategorie", etc. und dass sie im Gegenzug "viele Events" haben, richtig? Ich stelle nur sicher, weil das nicht logisch liest wie die meisten anderen Assoziationen. Ich brauche/möchte nicht von der anderen Seite auf ein Ereignis zugreifen können (d. H. User.event), weil es nicht viel Sinn machen würde. Also, wenn ich das tue, würde ich nur den belongs_to Anruf hinzufügen und nicht die has_one auf der anderen Seite?

Vielleicht habe ich das falsch konstruiert.

Ich möchte schließlich in der Lage sein ein ‚Log-Seite‘ mit Zeilen gefüllt zu machen, erreichen Reihe ein wenig etwas wie beschrieben:

event.user event.action event.item event.category 
+0

Haben Sie in acts_as_auditiert gesucht? Es tut nicht genau, was Sie aus der Box suchen. Aber wird mit minimalem Aufwand. – EmFi

Antwort

1

brauche ich nicht/will Zugang zu können, ein Ereignis von der anderen Seite (dh user.event), weil es viel Sinn nicht machen würde. Also, wenn ich das tue, würde ich nur den Zugehörigkeitsanruf hinzufügen und nicht die has_one auf der anderen Seite?

hinzufügen sie beide (belongs_to und has_many). Sicher, user.event macht keinen Sinn, aber user.events macht Sinn.

+0

Hmm das ist wahr. Danke vielmals! Ich nehme an, ich bin in meiner Schlussfolgerung richtig?Ereignis gehört zu Benutzer, Benutzer hat viele Ereignisse? –

+0

Ja, das stimmt. – rwilliams

1

Ja, hier möchten Sie eine has_many & gehört_to Association. Im Zusammenhang mit ActiveRecord ist es die has_many, die den Bedarf für die "gehört" definiert. "Wenn ein Modell (a) viele von einem anderen Modell (b) hat, dann gehört das zugehörige Modell (b) zu dem ersten Modell (a)".

Da einem Benutzer viele Ereignisse zugeordnet sind, gehört ein Ereignis zu einem Benutzer.

Wenn auf der anderen Seite ein Benutzer immer nur ein Ereignis zugeordnet hätte, dann hätten diese Modelle eine Assoziation "has_one".

+0

Danke! Ich schätze es. –