RTI中的STI Inheiritance。 查找问题
由于我的inheritance结构,我在搜索STI表中的记录时遇到问题
class User < ActiveRecord::Base
class LegacyUser < User class AuthUser < User
class SuperUser < AuthUser class FieldUser < AuthUser class ClientAdmin < AuthUser
问题是find不适用于AuthUser Model。 查询正在查找类型“AuthUser”,并且不包括其他三种可能性。
编辑:在玩这个时,它开始工作,但仅适用于ClientAdmin和FieldUser,因此似乎应该内置此function。但现在它已回到原始问题
我刚遇到同样的问题并在此找到了解决方案。
简而言之,问题是中间抽象类无法在加载之前知道它的子类是什么。 要解决此问题,您可以手动加载该类文件底部的所有子类。
所以在auth_user.rb的底部:
require_dependency 'super_user' require_dependency 'field_user' require_dependency 'client_user'
AuthUser模型是否会单独使用?
如果它只是inheritance类之间共享方法的类,则可以尝试将其设置为抽象类。 这样ActiveRecord可能会直接通过它。
在AuthUser的声明中,只需添加self.abstract_class = true
如下所示:
class AuthUser < User self.abstract_class = true end
我不知道这种情况是否有效,但值得一试。
由于STI在Rails中的工作方式(它将模型名称存储在名为“type”的数据库列中),我看不出它如何支持您在上面描述的层次结构 – 我认为您仅限于单级层次结构。