2016-05-18 2 views
0

J'ai une classe d'utilisateurs avec une association polymorphique inséparable (en fonction d'un type d'utilisateur). Chaque fois qu'un nouvel utilisateur est créé, le modèle de type d'utilisateur correspondant doit également être créé. L'utilisateur peut être créé non seulement via l'enregistrement régulier, mais aussi en utilisant omniauth (facebook, google). La question est: est-ce que je devrais créer le type d'utilisateur et d'utilisateur dans chaque action ou ajouter la fonction de création personnalisée dans le modèle d'utilisateur, passer le type d'utilisateur et quelques paramètres et créer le type d'utilisateur et d'utilisateur?Rails: doit-on créer une classe d'utilisateurs 'double' (avec assoc polymorphe) dans le modèle ou le contrôleur?

est ici de créer une action de mon contrôleur d'inscription:

def create 

if params[:type] == 'employee' 
    @user_type = Employee.new sign_up_params[:user_type_attributes] 
elsif params[:type] == "customer" 
    @user_type = Customer.new sign_up_params[:user_type_attributes] 
elsif params[:type] == "owner" 
    @user_type = Owner.new sign_up_params[:user_type_attributes] 
else 
    flash[:notice]="Invalid parameter" 
    redirect_to :controller=>'welcome', :action=>'register_choice' 
    return 
end 

build_resource(sign_up_params) 

if resource.valid? && @user_type.valid? 

    ActiveRecord::Base.transaction do 
    super do 

     @user_type.save 
     resource.user_type = @user_type 

     if [email protected]_type.persisted? || !resource.persisted? 
     clean_up_passwords resource 
     set_minimum_password_length 
     flash[:alert]="Error" 
     raise ActiveRecord::Rollback 
     end 
    end 
    end 


else 
    #TODO error messages 
    clean_up_passwords resource 
    set_minimum_password_length 
    flash[:alert]="Error" 
    respond_with resource 
end 
end 
+0

Avez-vous utilisé concevoir? Est-ce que le contrôleur d'enregistrement de devise? – 7urkm3n

+0

Oui, il est écrasé contrôleur de l'appareil et cela fonctionne. Mais je veux aussi créer des utilisateurs dans les rappels omniauth et je me demande si je devrais simplement le copier ou l'encapsuler dans une action de modèle comme createFrom (type, user_params, user_type_params). – FunkyFrankie

Répondre

0

Comme vous l'avez dit, certaines choses doivent se produire après qu'un utilisateur est créé. Le chemin des rails serait d'ajouter un rappel "after_create" dans votre modèle utilisateur qui gère ce dont vous avez besoin une fois qu'un utilisateur est créé. Cela permettra de maintenir la conformité lors de l'ajout à votre application ou de collaborer avec d'autres.

+1

En fait, je veux que cela se produise simultanément, de sorte qu'aucun utilisateur n'est enregistré sans user_type enregistré (c'est pourquoi je l'ai enveloppé dans une transaction) – FunkyFrankie