5

Devise2.1を搭載したRails3.2アプリがあります

deviseを使用している2つのモデルがあります(AdminUserとUser)

モデル:

class AdminUser < ActiveRecord::Base
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable
end

class User < ActiveRecord::Base
    devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
end

deviseジェネレーターを介して両方のモデルに対して別々のビューを生成しました。AdminUserのviews/deviseフォルダー(新しい要件の数か月前に実装)Userモデルのviews/usersフォルダー

サインアウト後、デバイスモデルに一致する特定のアクションにリダイレクトしたいと思います。以下のコードはapplication_controller.rbで機能しますが、それなしで実行したい両方のモデルに適用されます。

def after_sign_out_path_for(user)
  user_landing_path
end

どちらかのモデルからサインアウトすると、同じランディングページにリダイレクトされますが、両方のデバイスモデルに固有の宛先が必要です。

どうすればこれを達成できますか?

4

2 に答える 2

10

ここでいくつかの例を見て、解決策と思われるものを見つけました http://eureka.ykyuen.info/2011/03/10/rails-redirect-previous-page-after-devise-sign-in/

def after_sign_out_path_for(resource_or_scope)
  case resource_or_scope
    when :user, User
      user_landing_path
    when :admin_user, AdminUser
      admin_user_landing_path
    else
      super
  end
end
于 2012-12-28T03:47:51.377 に答える
0

あなたができるいくつかのこと:

case user.class
when AdminUser.class
  do_admin_sign_out()
when User.class
  do_user_sign_out()
else
  no_idea_who_you_are()
end

また

if user.kind_of? AdminUser
  do_admin_thing()
else
  do_user_thing()
end

admin?または、両方のモデルにチェックを追加して、次のようにチェックすることもできます。

if user.admin?
  do_admin_thing()
...

これは他の場所で発生する可能性があるため、おそらく後で行いますが、これらはオプションの1つです。

于 2012-12-28T02:00:19.200 に答える