STI +命名空间

时间:2011-04-19 22:55:06

标签: ruby-on-rails namespaces model sti

我需要能够为用户安排提醒。所以我认为我可以创建一个基本模型Reminder并使用STI来创建后代类,这些类覆盖函数fire(),在提醒触发时调用。但是不同的用户角色具有相似类型的提醒。所以他们需要被命名空间,例如Adult::BrushTeethReminder向孩子的FB墙上的用户Kid::BrushTeethReminder帖子发送了一封电子邮件。

是否可以使用STI,如果是的话? 我看到的其他方式是只为KidBrushTeethReminder之类的模型名称添加前缀。或者更深入 - 编写一个根据类型创建对象的工厂方法。还是有更清洁的方式?

2 个答案:

答案 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