首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅使用基本STI类加载STI记录?

如何仅使用基本STI类加载STI记录?
EN

Stack Overflow用户
提问于 2019-06-26 07:41:11
回答 1查看 2.9K关注 0票数 1

假设我有使用STI的模型,如下所示:

代码语言:javascript
复制
class MyBase < ApplicationRecord ; end
class MyBase::MySubclass1 < MyBase ; end
class MyBase::MySubclass2 < MyBase ; end

当我使用基类查找记录时,所有记录都使用type列中的类加载。

代码语言:javascript
复制
MyBase.all.to_a.map { |record| record.class.name }
# => [MyBase::MySubclass1, MyBase::MySubclass2]

100次中有99次这是一件好事,但是否可以将这些记录加载到它们的基类中,而不是类型列中的类?例如

代码语言:javascript
复制
MyBase.first.class
# => MyBase

我希望有一种方法可以在AR查询中将其关闭,比如MyBase.where(condition: :something, use_base: true)...

我的用例是,我正在使用一个gem,它希望我向它传递一个AR关系,查看class.name,并在获得STI子类时中断。为了避免修补gem,我想遵守它的限制,并向它传递一个关系,该关系的记录的类在加载时将自动强制到STI基类中。

EN

回答 1

Stack Overflow用户

发布于 2019-06-26 11:31:44

代码语言:javascript
复制
Myclass.all.map{|e| e.becomes(Myclass)}

将给出Myclass类的对象,而不考虑type属性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56763355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档