0

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

STI 有可能吗?如果有,怎么办?我看到的其他方式是只为模型名称添加前缀,例如KidBrushTeethReminder. 或者更深入——编写一个根据类型创建对象的工厂方法。还是有更清洁的方法?

4

2 回答 2

1

我看到两种类型的提醒,一种针对成人,一种针对儿童。就个人而言,我会使用一个名为 Reminder 的 STI,并让一个名为 BrushTeeth 的模型继承自 Reminder。在 BrushTeeth 模型中,我将有两个名为 for_adult 和 for_kid 的布尔列。

在您的成人命名空间中,您可以通过查询 for_adult 列是否设置为 TRUE 并从那里建立您的逻辑/实现来检查 BrushTeeth。对于 Kid 命名空间,您检查 for_kid 列。

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

希望有帮助。

于 2011-04-20T03:18:37.223 回答
1

我发现您确实可以将 STI 用于不同命名空间中的模型。您只需要将它们放在适当的子文件夹中。例如,Kid::BrushTeethReminder应该放在app/models/kid文件下brush_teeth_reminder.rb

于 2011-04-21T08:39:28.800 回答