ruby-on-rails - 在设计注册 Controller 中添加用户配置文件

标签 ruby-on-rails devise

我有一个包含三种用户的 Rails 应用程序:专业人士、学生和普通市民。因此,我使 User 模型具有三种不同类型的配置文件。

用户.rb

belongs_to :profile, polymorphic: true

专业.rb

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

学生.rb

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

公民.rb

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

我想使用 Devise 作为中心注册并为用户模型创 build 计

rails generate devise User

然后我创建了一个继承自 Devise Registrations Controller 的 Registrations Controller ,并在 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

现在,这是可行的,因为通过覆盖应用程序 Controller 中的 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 的创建用户操作,以便它同时创建相关的配置文件。

最佳答案

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

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

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

关于ruby-on-rails - 在设计注册 Controller 中添加用户配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15692212/

相关文章:

ruby-on-rails - 在 ActiveJob 中使用自定义 Rails 助手

ruby-on-rails - 覆盖active_for_authentication?为了设计

ruby-on-rails - Golang duplicate rails 设计 gem 密码加密

ruby-on-rails - 在 Rails 中,是否可以限制谁可以使用 api 登录 google?

ruby-on-rails - 仅当存在文件扩展名时如何验证文件扩展名?重新 : carrierwave

ruby-on-rails - Heroku 上的 Postgresql 数据库

ruby-on-rails - ActionController::InvalidAuthenticityToken Rails 5/Devise/Audited/PaperTrail gem

ruby-on-rails - 当 Devise 用户超出我的默认范围时,如何允许他们登录?

ruby-on-rails - 如何通过 Carrierwave 通过 JSON API 上传文件?

ruby-on-rails - 如何在使用虚拟属性时添加错误消息