我有一个具有不可分割的多态关联的用户类(取决于用户类型)。每次创建新用户时,还必须创建相应的用户类型模型。用户不仅可以通过常规注册创建,还可以使用omniauth(facebook,google)创建 问题是:我应该在每个操作中创建用户和用户类型,还是在用户模型中添加自定义创建功能,传递用户类型和一些参数,并在那里创建用户和用户类型?
以下是我的注册控制器的创建操作:
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 !@user_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 :(得分:0)
如您所述,某些事情需要在创建用户后发生。 rails方式是添加" after_create"用户模型中的回调,用于处理创建用户后所需的内容。这将在添加到您的应用或与他人协作时保持一致性。