0

私は非常に太ったユーザーモデルを持っています。特定のメソッドを分離して、作成する新しいモデルに入れたいと思います。これは、STIを使用するユーザーから継承するManagerと呼ばれます。

class User < ActiveRecord::Base
 ..
 def user_method
 end
end

class Manager < ActiveRecord::Base
 ..
 def manager_method
 end
end

Deviseがこれをどのように処理するのか興味があります。すでにユーザーがいるとしましょう。また、ユーザーがマネージャーであるとしましょう。しかし、彼がログインすると、current_userオブジェクトはUserクラスからインスタンス化されますよね?本当のオブジェクト指向の方法では、Railsは親クラスのインスタンスから子のメソッドにアクセスすることを許可しないと思います...そうですか?

では、current_userオブジェクトがtype列で指定されたクラスのインスタンスであることを確認するには、何をする必要がありますか?これはRailsのSTIの場合です。

4

1 に答える 1

0

次のように簡単に実行できます。

class User < ActiveRecord::Base
  ROLES = ['Admin', 'RoleX', 'RoleY']
  devise :database_authenticatable, :blah
  attr_accessible :email, :blah
  validates :something

  def method
  end
end

たとえば、ユーザーから継承する管理者のクラスを定義しますが、devise では別のロールのままになります。

class Admin < User
  def some_method

  end
end
于 2012-08-22T00:44:38.347 に答える