Ruby on rails STI和x2B;名称空间

Ruby on rails STI和x2B;名称空间,ruby-on-rails,namespaces,model,sti,Ruby On Rails,Namespaces,Model,Sti,我需要能够为用户安排提醒。所以我想我可以创建一个基本模型rementer,并使用STI生成子类,这些子类重写函数fire(),该函数在rementer触发时调用。但是不同的用户角色有相似类型的提醒。因此,它们需要有名称空间,例如,成人::刷牙提醒向用户发送电子邮件,孩子::刷牙提醒张贴在孩子的FB墙上 STI是否可行?如果可能,如何实现? 我看到的另一种方法是只在模型名称前面加前缀,比如kidbrushteethremement。或者更深入一点——编写一个工厂方法,根据类型创建对象。还是有更干净

我需要能够为用户安排提醒。所以我想我可以创建一个基本模型
rementer
,并使用STI生成子类,这些子类重写函数
fire()
,该函数在rementer触发时调用。但是不同的用户角色有相似类型的提醒。因此,它们需要有名称空间,例如,
成人::刷牙提醒
向用户发送电子邮件,
孩子::刷牙提醒
张贴在孩子的FB墙上

STI是否可行?如果可能,如何实现?
我看到的另一种方法是只在模型名称前面加前缀,比如
kidbrushteethremement
。或者更深入一点——编写一个工厂方法,根据类型创建对象。还是有更干净的方法?

我看到两种提醒,一种是成人提醒,一种是小孩提醒。就我个人而言,我会使用一个名为“提醒”的STI,并使用一个名为“刷牙”的模型从提醒中继承。在刷牙模型中,我有两个布尔列,分别命名为“成人”和“儿童”

在成人名称空间中,您可以通过查询for_成人列是否设置为TRUE来检查Brushthes,并从此处建立逻辑/实现的基础。对于Kid名称空间,检查for_Kid列

以提醒为基础,您可以轻松选择其他提醒(如淋浴、洗澡、指甲等)。提醒模型还带有一个类型列,因为这是一个STI模型


希望能有所帮助。

我发现您确实可以对不同名称空间中的模型使用STI。您只需要将它们放在适当的子文件夹中。例如,
Kid::brushteethrementer
应该放在
app/models/Kid
文件
brush\u rementer.rb

中的
rementer
作为基类。但儿童和成人只是一个简单的例子,确实有很多不同的角色和提醒,因此为儿童添加列
,为成人添加列
将不是一个优雅的方式。