我需要能够为用户安排提醒。所以我想我可以创建一个基本模型Reminder,并使用STI来生成子类,这些子类覆盖了fire()函数,该函数在提醒触发时被调用。但是不同的用户角色有相似类型的提醒。因此它们需要命名空间,例如Adult::BrushTeethReminder向用户发送电子邮件,Kid::BrushTeethReminder在kid's FB墙上发帖。
可以使用STI吗?如果可以,如何使用STI?我看到的另一种方式是只在模型名称前加上前缀,比如KidBrushTeethReminder。或者更深入--编写一个工厂方法,根据类型创建对象。还是有一种更干净的方法?
发布于 2011-04-21 16:39:29
我发现您确实可以对不同名称空间中的模型使用STI。您只需要将它们放在适当的子文件夹中。例如,Kid::BrushTeethReminder应该放在文件brush_teeth_reminder.rb中的app/models/kid下
发布于 2011-04-20 11:18:37
我看到两种类型的提醒,一种是成人的,另一种是孩子的。就我个人而言,我会使用一个名为Reminder的STI,并从Reminder继承一个名为BrushTeeth的模型。在BrushTeeth模型中,我有两个布尔列,分别名为for_adult和for_kid。
在您的成人命名空间中,您可以通过查询for_adult列是否设置为TRUE来检查BrushTeeth,并从中建立您的逻辑/实现的基础。对于Kid Namespace,您可以检查for_kid列。
以提醒为基础,让你可以轻松选择其他提醒(如淋浴、洗浴、指甲等)。提醒模型还附带一个Type列,因为这是一个STI模型。
希望这能有所帮助。
https://stackoverflow.com/questions/5723716
复制相似问题