私は、専門家、学生、一般市民の 3 種類のユーザーを持つ Rails アプリを持っています。したがって、User モデルを 3 種類のプロファイルでポリモーフィックにしました。
ユーザー.rb
belongs_to :profile, polymorphic: true
プロフェッショナル.rb
has_one :user, as: :profile, dependent: :destroy
学生.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 つとして、関連するプロファイルを同時に作成するために、Devise の create user アクションをオーバーライドする必要があるかどうか疑問に思っていました。