首页 文章

在设计注册控制器中添加用户配置文件

提问于
浏览
3

我有一个Rails应用程序,有三种用户,专业人士,学生和普通公民 . 因此,我使用三种不同的配置文件制作了用户模型多态 .

User.rb

belongs_to :profile, polymorphic: true

Professional.rb

has_one :user, as: :profile, dependent: :destroy

Student.rb

has_one :user, as: :profile, dependent: :destroy

Citizen.rb

has_one :user, as: :profile, dependent: :destroy

我想使用Devise作为中心注册并为User模型创建设计

rails generate devise User

然后我创建了一个继承自Devise Registrations控制器的Registrations控制器,并在after_sign_up_path_for方法中,我将用户分配给用户在注册表单上选择的任何配置文件 .

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(user)

    if user.professional === true

      user.profile = ProfessionalProfile.create!
      user.save!
    elsif
       .... 

  end
end

现在,这可行,通过覆盖应用程序控制器中的 def after_sign_in_path_for(resource) ,我可以将用户重定向到他们创建的任何配置文件

def after_sign_in_path_for(resource)

     if current_user.profile_type === 'ProfessionalProfile'
        professional_profile_path(current_user)

     elsif 
        ....
    end

然而,即使这有效,我对Rails的经验很少(在制作我自己的应用程序方面;我已经遵循了一些教程)并设计,所以我想知道,在我继续开发应用程序之前,如果我通过这种方式创建配置文件,无论是设计还是其他任何事情都会遇到问题 . 有一个更好的方法吗?

我想作为一种可能的替代方案,我想知道是否应该尝试覆盖Devise的创建用户操作,以便它同时创建相关的配置文件 .

1 回答

  • 1

    您可以使用以下代码将列添加到用户表:

    rails generate migration add_professional_to_users professional:boolean
    

    和类似的

    rails generate migration add_student_to_users student:boolean
    

    并且

    rails generate migration add_citizen_to_users citizen:boolean
    

    这是一个更好的方法,据我说,类似的方法是由设计描述创建一个管理员,在这里看到:devise,option1

    同样,您可以添加这些角色 . 只是一个选项,但我觉得更好 .

相关问题