rails STI:子类的特定属性

rails STI: specific attributes for subclasses

我正在开始构建我的第一个 rails 应用程序,并且我已经有了带有 STI 的用户模型(管理员、员工、public 和代表都继承自用户模型)。 但现在我想为代表性子类添加特定列(地址、状态、phone),但我不能直接为子类模型应用迁移。

谢谢

祝你一切顺利

我认为第二个选项比第一个更好。

原因: 1) 如果所有文件都是可选的,那么它将创建空值记录,但在第二种情况下,如果所有文件都是可选的,那么将不会创建记录,不需要任何条目。

2) 将来需要将此字段添加或使用到其他模型中,那么您可以通过多态关联轻松实现。

在这种情况下,您似乎在滥用 STI 的概念。一般规则是,您可能对不同的子模型和不同的行为有不同的关联,但您总是拥有所有子模型使用的所有 table 列。

为什么要使用 STI 的全部想法是所有模型都包含相同的数据结构,但可能具有不同的行为。在您的情况下,我建议使用关联(正如您自己建议的那样),然后在子模型中添加 has_one/has_many,这将限制继承链中的关联范围。

在不修补 ApplicationRecord 的情况下,无法将列限制为仅某些子模型。但是在任何情况下,即使您设法制作了一个补丁来引入这种行为,您的数据库 table 仍将具有所有 table 的所有列,从而导致更大的数据库 tables 由于半个空列、大小增加和性能降低。

我希望这能回答你的问题。