2017-01-21 3 views
1

Je suis encore débutant dans Rails, mais j'ai été confondu avec l'initialisation d'une association HABTM. La lecture de sa documentation, il est ditLa méthode de construction n'associe pas dans Rails

Lors de l'initialisation d'une nouvelle has_one ou belongs_to association, vous devez utiliser le préfixe build_ pour construire l'association, plutôt que la méthode association.build qui serait utilisé pour les associations has_many ou has_and_belongs_to_many.

Donc, en gros, supposons que nous avons deux modèles:

class User < ApplicationRecord 
    has_and_belongs_to_many :organizations 
end 

class Organization < ApplicationRecord 
    has_and_belongs_to_many :users 
end 

intérieur organization_controller, depuis que je suis à l'aide de conception, d'mes méthode de création devrait avoir quelque chose comme ceci:

@organization = current_user.organizations.build(organization_params) 
@organization.save 

Cependant, cela ne fonctionne pas. Avec byebug, j'ai vérifié que pour les current_user.organizations, la nouvelle organisation était là, mais si j'appelle @ organization.users, il y a un tableau vide. On dirait qu'il est nécessaire d'exécuter current_user.save aussi, est-ce correct? J'ai pu associer les deux modèles avec ce code:

@organization = Organization.new(organization_params) 
@organization.users << current_user 
@organization.save 
+0

Vous ne manquez pas une table de jointure? –

+0

Non, c'est là –

Répondre

1

Vous devriez fortement envisager d'utiliser has_many,: par comme c'est la meilleure façon de faire ce genre de relations maintenant dans Rails. Ayant dit que si vous voulez utiliser has_and_belongs_to_many associations yes c'est stocké dans la table join sur l'objet principal save.