3

私は、専門家、学生、一般市民の 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 アクションをオーバーライドする必要があるかどうか疑問に思っていました。

4

1 に答える 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によって説明されているため、これは私によるとより良い方法です。ここでそれを参照してください:devise、option1

同様に、これらのロールを追加できます。単なるオプションですが、私がより良いと感じるものです。

于 2014-01-27T17:57:25.660 に答える