web-dev-qa-db-fra.com

Rails appartient_à de nombreux modèles

J'ai trouvé quelques questions sur SO about Rails associations qui sont un peu comme ma question, mais pour la vie de moi, je n'arrive pas à comprendre comment utilisation belongs_to plusieurs modèles.

Voici le structure de la table j'ai l'intention d'avoir:

User
 id

Post
 id
 user_id #foreign key; a post belongs to a User aka "Who created this post"

Comment
 id
 user_id #foreign key; a comment belongs to a User aka "Who made this comment"
 post_id #foreign key; a comment belongs to a Post aka "What post this comment is for"

Et les associations:

User
 has_many :posts
 has_many :comments

Post
 belongs_to :user
 has_many :comments

Comment
 belongs_to :user
 belongs_to :post

Est-ce la bonne approche?

53
Zabba

Oui, c'est la bonne approche.

56
Maxem

Bien que ce ne soit pas toujours la "meilleure" approche, Rails propose ce qu'on appelle une l'association appartient à la polymorphe . Elle vous empêche de définir une clé étrangère dans la base de données car la colonne xxx_id est référencer un identifiant dans l'une des nombreuses tables possibles tandis qu'une autre colonne désigne le nom du modèle de cette table, mais elle rend la relation plus explicite dans Rails. En outre, elle restreint le modèle à n'appartenir qu'à l'un des autres modèles, par opposition à l'appartenance à une ou plusieurs, car cela se produirait en utilisant la configuration de plusieurs clés étrangères sans magie supplémentaire de base de données.

10
Zhenya Slabkovski