Tenir compte deux modèles:Impossible de décider si "le modèle A appartient au modèle B" OU "le modèle B appartient au modèle A"?
User
=> (id: integer, nom: chaîne, created_at: datetime, updated_at: datetime, department_id: entier)Department
=> (id: entier, nom: chaîne, created_at: datetime, updated_at: datetime)
Maintenant, il existe une relation évidente entre ces deux tables. il est
- Chaque
User
a un département - A
Department
appartient à de nombreux utilisateurs à savoir il y a plusieurs utilisateurs dans un seul département
, je choisis EAppuyez les mêmes que suivant que A belongs_to B
class User < ActiveRecord::Base
has_one :department
end
class Department < ActiveRecord::Base
belongs_to :user
end
> @user = User.find(1)
> @user.department.name
Department Load (1.0ms) SELECT "departments".* FROM "departments" WHERE "departments"."user_id" = 1 LIMIT 1
ActiveRecord::StatementInvalid: PG::Error: ERROR: column departments.user_id does not exist
Après beaucoup de succès & essai. Je suis tombé sur la bonne façon de définir ce qui est juste inverse i.e. B belongs to A
class Department < ActiveRecord::Base
has_many :users
end
class User < ActiveRecord::Base
belongs_to :department
end
> @user = User.find(1)
> @user.department.name
Department Load (1.0ms) SELECT "departments".* FROM "departments" WHERE "departments"."id" = 1 LIMIT 1
=> "HR"
Maintenant, cela est exact opposé de la façon dont mon cerveau pense à ces associations. Donc, je suis un peu confus, donc si quelqu'un pouvait expliquer ce qui se passe?
Pourquoi B belongs to A
& PAS A belongs to B
?
Parce qu'il n'y a pas "belongs_to_many"? Un département a beaucoup d'utilisateurs - je pense juste à "belongs_to" comme un inverse nommé de cette relation. –