2010-09-22 8 views
0

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)

+0

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

+0

Peter, vous avez raison - un utilisateur peut seulement avoir un A, B, ou C. – sscirrus

+0

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

Répondre

0

Salut essayez d'ajouter des validations dans votre User modèle (présence du type d'utilisateur) et en sauvegarder l'action

a = params[:user_type].constantize.new.save(false) 
@user.user_type_id = a.id 
@user.save! 

et avez-vous utilisé des associations polymorphes?