Ruby on rails 钢轨的STI固有力。查找的问题
由于我的继承结构,我在搜索STI表中的记录时遇到问题Ruby on rails 钢轨的STI固有力。查找的问题,ruby-on-rails,activerecord,single-table-inheritance,Ruby On Rails,Activerecord,Single Table Inheritance,由于我的继承结构,我在搜索STI表中的记录时遇到问题 class User < ActiveRecord::Base class用户
class User < ActiveRecord::Base
class用户
class LegacyUser
class超级用户
问题是find不适用于AuthUser模型。查询正在查找类型“AuthUser”,不包括其他三种可能性
编辑:在使用该功能时,它开始工作,但仅适用于ClientAdmin和FieldUser,因此似乎应该内置此功能。但是现在,由于STI在Rails中的工作方式(它将模型名称存储在一个名为“type”的数据库列中),它又回到了原来的问题上。我不知道它如何支持您上面描述的层次结构-我认为您仅限于一个单级层次结构。AuthUser模型将被自己使用吗 如果它只是继承类之间共享方法的类,则可以尝试将其设置为抽象类。这样ActiveRecord就可以直接通过它了 在AuthUser声明中,只需添加如下内容:
class AuthUser < User
self.abstract_class = true
end
class-AuthUser
我不知道这在这种情况下是否有效,但可能值得一试。我只是遇到了同样的问题并找到了解决方案 简而言之,问题是中间抽象类在加载之前无法知道其子类是什么。要解决这个问题,您可以手动加载该类文件底部的所有子类 因此,在auth_user.rb的底部:
require_dependency 'super_user'
require_dependency 'field_user'
require_dependency 'client_user'
我的数据库中确实有Type列。起初,我认为我只限于一个级别,但在某一点上,AuthLogic查找到了所有4种可能的类型。现在,它只查看基本类AuthUser类包含3个子类的共享功能。这些附加子类的目的是在permissionsOk方面做出不同的响应,这应该是可行的。我总是这样使用(但不是在STI的中间)。在常规情况下,将其设置为抽象将告诉ActiveRecord不要为该模型查找表,因此在STI中,它应该(根据我的逻辑)不要查找该类型。这意味着,如果您也需要实例化该模型,它将不起作用,但只有使用子类才能起作用。
class AuthUser < User
self.abstract_class = true
end
require_dependency 'super_user'
require_dependency 'field_user'
require_dependency 'client_user'