假设我有使用STI的模型,如下所示:
class MyBase < ApplicationRecord ; end
class MyBase::MySubclass1 < MyBase ; end
class MyBase::MySubclass2 < MyBase ; end当我使用基类查找记录时,所有记录都使用type列中的类加载。
MyBase.all.to_a.map { |record| record.class.name }
# => [MyBase::MySubclass1, MyBase::MySubclass2]100次中有99次这是一件好事,但是否可以将这些记录加载到它们的基类中,而不是类型列中的类?例如
MyBase.first.class
# => MyBase我希望有一种方法可以在AR查询中将其关闭,比如MyBase.where(condition: :something, use_base: true)...
我的用例是,我正在使用一个gem,它希望我向它传递一个AR关系,查看class.name,并在获得STI子类时中断。为了避免修补gem,我想遵守它的限制,并向它传递一个关系,该关系的记录的类在加载时将自动强制到STI基类中。
发布于 2019-06-26 11:31:44
Myclass.all.map{|e| e.becomes(Myclass)}将给出Myclass类的对象,而不考虑type属性。
https://stackoverflow.com/questions/56763355
复制相似问题