8

Rails 3.0.9 と認証用のデバイスを使用しています。ポリモーフィズムを使用する必要があるため、単一テーブルの継承を使用しようとしているため、User クラスから継承する UserType1 と UserType2 の 2 つのクラスがあります。ユーザーのタイプに応じて、そのDeviseインスタンスが current_user を正しく必要とします。

例えば、

class User < ActiveRecord::Base
 #devise and other user logic 
end

class UserType1 < User
  def get_some_attribute
     return "Hello, my type is UserType1"
  end
end

class UserType2 < User
  def get_some_attribute
   return "Hello, my type is UserType2"
  end
end

In controller 

class MyController < ApplicationController
  def action
    @message = current_user.get_some_attribute #depending the type using polymorphism
    render :my_view
  end
end
4

2 に答える 2

5

それはまさにあなたが必要とするものです:http://blog.jeffsaracco.com/ruby-on-rails-polymorphic-user-model-with-devise-authentication

アプリケーションコントローラのサインインパスメソッドをオーバーライドする必要があります。お役に立てば幸いです。

于 2013-03-12T11:12:40.520 に答える
1

モデルget_some_attribute内にメソッドを追加する必要がありますUser

Module User < ActiveRecord::Base

   #devise and other user logic 

   def get_some_attribute
      #You can put shared logic between the two users type here
   end

end

次に、次のようにユーザー サブタイプでオーバーライドします。

Module UserType1 < User

   def get_some_attribute
      super
      return "Hello, my type is UserType1"
   end

end

Module UserType2 < User

   def get_some_attribute
      super
      return "Hello, my type is UserType2"
   end

end

その後、期待どおりに動作します。Ruby でのメソッドのオーバーライドについて詳しく知りたい場合は、ここでcurrent_user.get_some_attribute読むことができます。

superにいくつかの共有ロジックがあると仮定したので追加しました。これは User モデルでget_some_attribute呼び出さget_some_attributeれるため、不要な場合は削除できます。

幸運を!

于 2013-03-17T10:52:14.980 に答える