我正在开始构建我的第一个rails应用程序,我已经拥有了STI的用户模型(管理员,员工,公共和代表都继承自用户模型)。 但现在我想为代表性子类添加特定列(地址,状态,电话),但我不能直接为子类模型应用迁移。
由于
答案 0 :(得分:3)
希望你做得好
我认为第二种选择比第一种更好。
原因: 1)如果这个所有字段都是可选的,那么它将创建具有空值的记录,但在第二种情况下,如果所有字段都是可选的,则不会创建记录,不需要任何条目。
2)将来有需要在其他模型中添加或使用此文件,然后您可以通过多态关联轻松完成。
答案 1 :(得分:2)
听起来你在这种情况下滥用了STI的想法。一般规则是,您可能对不同的子模型和不同的行为有不同的关联,但您始终拥有所有子模型使用的所有表列。
您想要使用STI的原因是所有模型都包含相同的数据结构,但可能有不同的行为。在您的情况下,我建议使用关联(如您自己建议的那样),然后在子模型中添加has_one/has_many
,这将限制继承链中的关联范围。
如果不修补ApplicationRecord,则无法将列限制为仅某些子模型。但无论如何,即使你设法做一个补丁来引入这种行为,你的数据库表仍然会包含所有表的所有列,因此由于半空列,增加的大小和减少而导致更大的数据库表性能
我希望能回答你的问题。