Ruby on rails 如何仅使用基本STI类加载STI记录?
假设我有使用STI的模型,如下所示:Ruby on rails 如何仅使用基本STI类加载STI记录?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,假设我有使用STI的模型,如下所示: classmybase
classmybase
当我使用基类查找记录时,所有记录都会随“类型”列中的类一起加载
MyBase.all.to_a.map{| record | record.class.name}
#=>[MyBase::MySubclass1,MyBase::MySubclass2]
100次中有99次这是一件好事,但是有可能将这些记录加载到它们的基类中而不是类型列中的类中吗?乙二醇
MyBase.first.class
#=>MyBase
我希望有一种方法可以在AR查询中关闭它,比如MyBase
我的用例是,我正在使用一个gem,它希望我向它传递一个AR关系,查看class.name,并在它得到一个STI子类时中断。为了避免修补gem,我希望遵守它的限制,并向它传递一个关系,该关系的记录类将在加载时自动强制进入STI基类
Myclass.all.map{|e| e.becomes(Myclass)}
将为Myclass类的对象指定类型属性。不要认为“使用不同的类加载记录”是可能的。但你可能走错了方向,试图用这种方式解决你真正的问题?请添加更多关于宝石的信息,以及你想要实现的目标?我会把它全部打印出来,但细节相当复杂。。。基本上,我正在使用一个gem,它接受一个AR关系对象,并尝试查找我希望使用class.name定义的其他类。我的基本STI类有十几个继承它的类,我不想再定义十几个几乎完全相同的类。尝试通过使用const_set并在叶子上迭代来动态创建这些类,但这不起作用,因为我的gem在定义类时假定class.name为非nil。tldr是这个或者猴子补丁宝石。这几乎奏效了。我正在使用一个gem,它希望我给它一个AR对象,并调用map{e | e.beans(MyClass)}
将AR对象折叠成一个数组。我的gem想调用join
或includes
,对我传递的内容进行调用。在问题中增加了这一要求。我没有想到使用它,也许我可以用它做一个更外科的猴子贴片。我会看到。。。