2010-11-25 14 views
0

Salut les gars. Je les modèles suivants:Rails Model Association Confusion

  • Catégorie
  • événement
  • verrouillage
  • Article
  • Site
  • utilisateur

Events sont essentiellement un "log élément". En d'autres termes, ils vont stocker ce que l'action a été faite sur ce Item par ce que User dans quoi Category. Naturellement, quand j'ai pensé à cela, j'ai pensé qu'il "a un utilisateur", "a une catégorie", "a un élément", et ainsi de suite. Cependant, cela signifierait qu'il y aurait une clé étrangère pour le Event dans n'importe quelle rangée User, mais ce n'est pas ce que je veux. Je veux la clé étrangère dans la ligne Event, puisque le Event est tout simplement donner des informations à ce User, ce Category, etc.

Donc je crois comprendre que je devrais plutôt dire qu'un Event « appartient à un utilisateur », "appartient à une catégorie", etc. et que chacun "a plusieurs événements" en retour, correct? Je suis juste sûr, parce que cela ne se lit pas logiquement comme la plupart des autres associations. Je n'ai pas besoin de/je veux pouvoir accéder à un événement de l'autre côté (c'est-à-dire user.event) car cela n'aurait pas beaucoup de sens. Donc, si je fais cela, est-ce que j'ajouterais simplement l'appel belongs_to et non le has_one de l'autre côté?

Peut-être que j'ai mal conçu cela.

Je veux éventuellement être en mesure de rendre une page de journal »rempli de lignes, atteindre la ligne décrit un peu quelque chose comme:

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

Avez-vous regardé dans acts_as_audited? Il ne fait pas exactement ce que vous cherchez à sortir de la boîte. Mais le fera avec un minimum d'effort. – EmFi

Répondre

1

Je ne ai pas besoin/veulent être en mesure d'accéder un événement de l'autre côté (c.-à-d. user.event), car cela ne ferait pas beaucoup de sens à . Donc, si je fais cela, est-ce que je devrais ajouter l'appel belongs_to et non le has_one de l'autre côté?

Ajoutez-les à la fois (belongs_to et has_many). Bien sûr, user.event n'a pas de sens, mais user.events a du sens.

+0

Hmm c'est vrai. Merci beaucoup! Donc, je suppose que j'ai raison dans ma conclusion?événement appartient à l'utilisateur, utilisateur has_many events? –

+0

Oui, c'est vrai. – rwilliams

1

Oui, ici vous voulez utiliser une association has_many & belongs_to. Dans le contexte d'Activerecord, c'est has_many qui définit le besoin de l'appart_to. "Si un modèle (a) a beaucoup d'un autre modèle (b) alors ce modèle associé (b) appartient au premier modèle (a)".

Étant donné qu'un utilisateur aura de nombreux événements associés, un événement appartiendra à un utilisateur.

Si, par contre, un utilisateur ne devait avoir qu'un seul événement associé, alors ces modèles auraient une association "has_one".

+0

Merci! Je vous en suis reconnaissant. –