【问题标题】:Rails Single Table Inheritance how to find record of child classes from querying parent class?Rails Single Table Inheritance如何从查询父类中找到子类的记录?
【发布时间】:2015-07-06 14:41:06
【问题描述】:

我有支持单表继承的events 表和Event 类。 有 Events::Template 类继承自它。而且还有更多的 3-4 个类继承自 Events::Template 类(即 3 层继承)。

当我查询Events::Template 类时,我想要所有子类的结果记录。所以当我这样做时

Events::Template.where(....)

它会生成以下查询

SELECT "events".* FROM "events"  WHERE "events"."type" IN ('Events::Template')...

此默认查询仅将类型过滤为Events::Template

有什么方法可以删除类型的默认查询或将其更改为查看Events::Template 的所有子类?

【问题讨论】:

  • STI 不支持您正在寻找的内容,AFAIK。你需要改变你的架构..

标签: ruby-on-rails ruby-on-rails-4 activerecord single-table-inheritance


【解决方案1】:

据我所知,您需要在表中添加附加字段(事件) - 类型:字符串

您可以使用此字段来过滤您的查询。

【讨论】:

  • 字段在那里......问题是当我在父类中编写范围时,它正在通过type 过滤结果,如问题所述。那么有没有办法删除/修改这个默认过滤器?
  • 我刚刚再次阅读了这个问题,我需要一些解释:您的模板类是:模板并且您有以下子项:Event::Template SomethingElese::Template ?也许单数与复数是问题?
  • 抱歉不清楚,关系如下 Event => Events::Template => (1. Events::Template::Create 2. Events::Template::Delete 3. Events ::模板::更新)
  • 所以Event 是最顶级的类...Events::Template 是它的子类,其他三个类是Events::Template 类的子类
  • 我不知道你为什么在你的情况下使用 STI。我很好奇“创建”、“删除”和“更新”子类背后的逻辑是什么。 :) 你确定你要找的东西不能用状态机或服务对象来解决吗?无论哪种方式,如果我能帮助你,我会很快看看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多