2012-12-28 12 views
5

Mam Rails 3.2 app z opracowują 2,1unikalnych ścieżek after_sign_out z wielu modeli z opracowania i szyny

mam 2 modele używając opracowania (AdminUser i USER)

modele:

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 

Wygenerowałem osobne widoki dla obu modeli za pomocą generatora devise. widoki/devise folder dla AdminUser (zaimplementowano kilka miesięcy wcześniej przed nowym wymaganiem) Widok/folder użytkowników dla Modelu użytkownika

Po wylogowaniu chcę przekierować do konkretnych działań, które pasują do modeli. Poniższy kod działa w application_controller.rb ale jest zastosowanie do obu modeli, które chcę zrobić bez:

def after_sign_out_path_for(user) 
    user_landing_path 
end 

wylogować się z modelem albo przekierowuje do tej samej strony docelowej, ale chciałbym mieć unikalny cel dla obu modeli.

Jak mogę to osiągnąć?

Odpowiedz

0

Niektóre rzeczy można zrobić:

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

lub

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

alternatywnie, można dodać sprawdzanie admin? do obu modeli i sprawdzić, tj:

if user.admin? 
    do_admin_thing() 
... 

Prawdopodobnie zrobię to później, ponieważ może się to wydarzyć gdzie indziej, ale są one wśród twoich opcji.

+0

Gdzie ten kod pójdzie w kontekście sekwencji Devise SignOut? Widzę kontrole działające na zasadzie ad-hoc, ale nie wiem, jak to pasuje w tym przypadku, w którym używam kontrolerów w silniku Devise – koa

Powiązane problemy