我需要能够为用户安排提醒。所以我认为我可以创建一个基本模型Reminder
并使用STI来创建后代类,这些类覆盖函数fire()
,在提醒触发时调用。但是不同的用户角色具有相似类型的提醒。所以他们需要被命名空间,例如Adult::BrushTeethReminder
向孩子的FB墙上的用户Kid::BrushTeethReminder
帖子发送了一封电子邮件。
是否可以使用STI,如果是的话?
我看到的其他方式是只为KidBrushTeethReminder
之类的模型名称添加前缀。或者更深入 - 编写一个根据类型创建对象的工厂方法。还是有更清洁的方式?
答案 0 :(得分:1)
我看到两种类型的提醒,一种针对成人,一种针对儿童。就个人而言,我会使用一个名为Reminder的STI,并且有一个名为BrushTeeth的模型继承自Reminder。在BrushTeeth模型中,我将有两个名为for_adult和for_kid的布尔列。
在Adultspace for Adult中,您可以通过查询for_adult列是否设置为TRUE来检查BrushTeeth,并从那里开始构建逻辑/实现。对于Kid Namespace,请检查for_kid列。
以提醒为基础,您可以轻松选择其他提醒(即淋浴,浴缸,指甲等)。 Reminder模型还附带一个Type列,因为这是一个STI模型。
希望有所帮助。
答案 1 :(得分:1)
我发现你可以将STI用于不同命名空间中的模型。您只需将它们放在适当的子文件夹中即可。例如,Kid::BrushTeethReminder
应放在文件app/models/kid
brush_teeth_reminder.rb
下