STI Inheiritance Rails中。 与查找问题(STI Inheiritance

2019-09-24 07:04发布

我有在寻找我STI表中记录的问题,由于我的继承结构

class User < ActiveRecord::Base

class LegacyUser < User

class AuthUser < User

class SuperUser < AuthUser

class FieldUser < AuthUser

class ClientAdmin < AuthUser

问题是,发现并没有对为AuthUser示范工作。 查询正在寻找类型“为AuthUser”,不包括其他的三种可能性。

编辑:尽管这种玩弄它开始工作,但只针对ClientAdmin和FieldUser如此看来这个功能应该是建立在,但现在它已经回到原来的问题。

Answer 1:

我只是碰到了同样的问题,并找到解决方案在这里 。

总之,问题是,有没有办法让你的中间抽象类以了解它的子类是什么,他们被载入前。 要解决这个问题,你可以手动的类文件底部加载所有的子类。

因此,在auth_user.rb的底部:

require_dependency 'super_user'
require_dependency 'field_user'
require_dependency 'client_user'


Answer 2:

是为AuthUser模型要单独使用?

如果仅仅是为了继承类,你可以尝试将其设置为抽象类之间共享的方法的类。 这样的ActiveRecord可能正好穿过它。

在为AuthUser的声明,只是添加self.abstract_class = true这样的:

class AuthUser < User
     self.abstract_class = true
end

我不知道,在这种情况下工作,但它可能是值得一试。



Answer 3:

由于STI工作在Rails的方式(在名为“类型”的数据库列存储的型号名称)我看不出它如何支持你上面描述的层次 - 我认为你是局限于单一的层次结构。



文章来源: STI Inheiritance in Rails. Issues with find