我有在寻找我STI表中记录的问题,由于我的继承结构
class User < ActiveRecord::Base
class LegacyUser < User
class AuthUser < User
class SuperUser < AuthUser
class FieldUser < AuthUser
class ClientAdmin < AuthUser
问题是,发现并没有对为AuthUser示范工作。 查询正在寻找类型“为AuthUser”,不包括其他的三种可能性。
编辑:尽管这种玩弄它开始工作,但只针对ClientAdmin和FieldUser如此看来这个功能应该是建立在,但现在它已经回到原来的问题。
我只是碰到了同样的问题,并找到解决方案在这里 。
总之,问题是,有没有办法让你的中间抽象类以了解它的子类是什么,他们被载入前。 要解决这个问题,你可以手动的类文件底部加载所有的子类。
因此,在auth_user.rb的底部:
require_dependency 'super_user'
require_dependency 'field_user'
require_dependency 'client_user'
是为AuthUser模型要单独使用?
如果仅仅是为了继承类,你可以尝试将其设置为抽象类之间共享的方法的类。 这样的ActiveRecord可能正好穿过它。
在为AuthUser的声明,只是添加self.abstract_class = true
这样的:
class AuthUser < User
self.abstract_class = true
end
我不知道,在这种情况下工作,但它可能是值得一试。
由于STI工作在Rails的方式(在名为“类型”的数据库列存储的型号名称)我看不出它如何支持你上面描述的层次 - 我认为你是局限于单一的层次结构。
文章来源: STI Inheiritance in Rails. Issues with find