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
Avez-vous utilisé concevoir? Est-ce que le contrôleur d'enregistrement de devise? – 7urkm3n
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