I\'m working on a Rails 3.2 app where I use Devise for authentication. I decided to try single table inheritance for managing user roles, but I quickly ran into a problem. I cur
Not sure if this is still needed a solution to this...
A more elegant way to have the double authentications could be to do the following:
private
def authenticate!
:authenticate_admin! || :authenticate_collaborator!
@current_user = admin_signed_in? ? current_admin : current_collaborator
end
Then call before_filter :authenticate!
If you dont need a universal '@current_user' variable just leave out the second line.
Hope this helps.
You can solve this using the following solution
def authenticate! if modelA_user_signed_in? @current_user = current_modelA true else authenticate_modelB! end end
You may separate all common logic to module and use only same table.
module UserMethods
#...
end
class User < ActiveRecord::Base
include UserMethods
devise ...
end
class Admin < ActiveRecord::Base
include UserMethods
self.table_name = "users"
devise ...
end
And configure all devise model separately in routes, views(if necessary, see Configuring Views). In this case, you may easy process all different logic.