3

私は Devise と Rails 4 を使用しています。複数のユーザー モデル (admin、usertype1、usertype2) を追加して、メインのユーザー モデルから継承するようにしたいと考えています。多くの投稿を検索した結果、望ましくない CanCan を使用するか、Single Table Inheritance を使用する可能性があるという結論に達しました。

私が見る方法は、Devise で作成したメインの User モデルに string-columnを追加することです。次のように、親から各サブクラスを拡張する必要もあります。

class Admin < User
end

class Usertype1 < User
end

class Usertype2 < User
end

私の質問は次のとおりです。次に何をしますか? タイプ列にアクセスする方法を正確に知るにはどうすればよいですか? たとえば、 current_adminを持つことができるように、 current_userヘルパーメソッドの Devise Controller をオーバーライドする必要もありますか?

4

3 に答える 3

3

これが元の質問に本当に答えているかどうかはわかりません。Devise 用に複数のセッション コントローラーをセットアップしようとしていますが、このユース ケースには複数のモデルが必要なようです。動作するバージョンができたら投稿します。

于 2013-10-30T16:08:28.013 に答える
1

easy_roles gem を使用することもできます。github で入手できます。この gem は、さまざまなユーザー ロールに対応するビットマスク ソリューションを提供します。ユーザーなどのモデルが 1 つだけ必要です。このモデルは属性「ロール」を取得します。github でドキュメントをチェックアウトするだけです。Devise + easy_roles + CanCan はとても良い設定で、とても便利だと思います。私はこれをかなり頻繁に使用します。

github へのリンク: https://github.com/platform45/easy_roles

于 2013-08-05T22:52:46.037 に答える
0

STI はあなたcurrent_adminに 、current_user1およびcurrent_user2方法を考案します。

で、次のようなapplication_controller.rbカスタムcurrent_userメソッドを作成します。

  def current_user
    if current_admin
      current_admin
    elsif current_user1
      current_user1
    else
      current_user2
    end
  end
helper_method :current_user

routes.rb とカスタムの sessions_controller.rb でいくつかの作業が必要になります。ここで受け入れられた回答を参照してくださいRails: Using Devise with single table inheritance

于 2016-03-11T12:14:52.950 に答える