我有一个 Rails 应用程序,其中包含三种用户,专业人士、学生和普通公民。因此,我使用三种不同的配置文件使用户模型具有多态性。
用户.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
我想使用设计作为中央注册并为用户模型创建设计
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 的创建用户操作,以便它同时创建相关的配置文件。