我正在使用rails 3.0.9并设计用于身份验证。现在我正在尝试使用单表继承,因为我需要使用多态,所以我有两个类:UserType1和UserType2,它继承自User类。我根据用户的类型正确地需要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
答案 0 :(得分:4)
这正是您所需要的:http://blog.jeffsaracco.com/ruby-on-rails-polymorphic-user-model-with-devise-authentication
您需要覆盖应用程序控制器中的登录路径方法,希望它有所帮助。
答案 1 :(得分: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
然后,current_user.get_some_attribute
将按预期工作,如果您想阅读有关Ruby中的覆盖方法的更多信息,可以阅读它here
我添加了super
,因为我假设您在get_some_attribute
中有一些共享逻辑,因为它会在用户模型中调用get_some_attribute
,如果您不需要它,可以删除它