J'ai quatre modèles avec l'exemple suivant:
utilisateur a un A, B ou C.
User.user_type = "A"
User.user_type_id = 12
En combinaison, user_type et user_type_id identifient la table et l'enregistrement auquel un utilisateur particulier est lié (dans cet exemple, notre utilisateur est connecté à l'enregistrement # 12 du tableau A).personnalisés/associations manuelles dans un contrôleur Rails
Sur l'utilisateur/nouveau formulaire, l'utilisateur décide quel type d'utilisateur ils sont, et le formulaire passe params [: user_type] contenant "A", "B" ou "C" au contrôleur Users /: create.
Basé sur params [: user_type] passé aux utilisateurs/créer, je dois construire une nouvelle A, B ou C. Voici ce que j'ai jusqu'à présent:
Users controller, create:
if @user.save # user_type is present, user_type_id is not
if @user.user_type == "A"
@a = A.new.save(false) # build a new A and bypass validation
@user.user_type_id = @a.id # set user's user_type_id.
@user.save(false) # minor update so save without validation
elsif @user.user_type == "B"
...
elsif @user.user_type == "C"
...
end
end
Ce code est incorrectement en me donnant "2" pour user_type_id à chaque fois. Je sais que je vais dans ce sens, mais je ne sais pas comment le faire de la manière la plus concise. Aucun conseil?
------ ------ EDIT
J'ai des associations polymorphiques mis en place. Mon mise en place actuelle est:
utilisateur belongs_to: authenticable,: polymorphes => true
A has_many: utilisateurs,: as =>: authenticable (similaire pour B et C)
Vous avez écrit User has_many As, Bs et Cs. Mais à partir de votre code, il semble qu'un utilisateur pourrait avoir un A, B ou C seulement. Je suggère d'utiliser l'association polymorphe aussi. – PeterWong
Peter, vous avez raison - un utilisateur peut seulement avoir un A, B, ou C. – sscirrus
Alors pour une instance A donnée, il aurait un seul utilisateur? ou il pourrait avoir beaucoup d'utilisateurs différents? Dans votre cas, je suppose qu'un seul, est-ce exact? – PeterWong