Ruby on rails rails STI:子类的特定属性
我正在开始构建我的第一个rails应用程序,我已经有了带有STI的用户模型(管理员、员工、公众和代表都继承自用户模型)。 但现在我想为代表性的子类添加特定的列(address、state、phone),但我不能直接为子类模型应用迁移Ruby on rails rails STI:子类的特定属性,ruby-on-rails,rails-activerecord,rails-migrations,Ruby On Rails,Rails Activerecord,Rails Migrations,我正在开始构建我的第一个rails应用程序,我已经有了带有STI的用户模型(管理员、员工、公众和代表都继承自用户模型)。 但现在我想为代表性的子类添加特定的列(address、state、phone),但我不能直接为子类模型应用迁移 第一个解决方案是将这些列添加到用户模型中,但我不知道如何将access限制为仅代表性的子类 第二种解决方案是创建一个单独的联系人表,然后使用多态关联(我想与其他模型关联)并添加属性 我的问题是,对于这种情况,什么是最好的解决方案?如果有更好的解决方案呢 谢谢希望
- 第一个解决方案是将这些列添加到用户模型中,但我不知道如何将access限制为仅代表性的子类
- 第二种解决方案是创建一个单独的联系人表,然后使用多态关联(我想与其他模型关联)并添加属性
- 我的问题是,对于这种情况,什么是最好的解决方案?如果有更好的解决方案呢
2) 将来需要将此字段添加或使用到其他模型中,然后您可以轻松地使用多态关联。在这种情况下,听起来您滥用了STI的概念。一般的规则是,对于不同的子模型和不同的行为,您可能有不同的关联,但您总是拥有所有子模型使用的所有表列 为什么要使用STI的整个想法是,所有模型都包含相同的数据结构,但可能有不同的行为。在您的情况下,我建议使用关联(正如您自己所建议的),然后在子模型中添加
has_one/has_many
,这将限制继承链中的关联范围
在不修补ApplicationRecord的情况下,无法将列仅限于某些子模型。但在任何情况下,即使您成功地制作了一个补丁来引入这种行为,您的数据库表仍将拥有所有表的所有列,因此由于列为半空、大小增加和性能降低,导致数据库表变大
我希望这能回答你的问题。在这种情况下,听起来你滥用了性传播感染的概念。一般的规则是,对于不同的子模型和不同的行为,您可能有不同的关联,但您总是拥有所有子模型使用的所有表列 为什么要使用STI的整个想法是,所有模型都包含相同的数据结构,但可能有不同的行为。在您的情况下,我建议使用关联(正如您自己所建议的),然后在子模型中添加
has_one/has_many
,这将限制继承链中的关联范围
在不修补ApplicationRecord的情况下,无法将列仅限于某些子模型。但在任何情况下,即使您成功地制作了一个补丁来引入这种行为,您的数据库表仍将拥有所有表的所有列,因此由于列为半空、大小增加和性能降低,导致数据库表变大
我希望这能回答您的问题。谢谢,我会使用多态关联选项,但我会等一等,以防有人有其他新选项建议谢谢,我将使用多态关联选项,但我会等待一段时间,以防有人有另一个新选项提示我只是参考了这个继承定义,也许rails与PostgreSql有不同的继承定义,那么CTI呢?但据我所知,您谈论的是STI的Rails实现,对吗?你给出的例子是不同的概念。是的,我确实问过STI,但在问题的最后,我还问是否有更好的解决方案,我刚刚开始理解STI和CTI之间的区别,我只是提到了继承的定义,也许rails对继承的定义与PostgreSql不同,那么CTI呢?但据我所知,您谈论的是STI的Rails实现,对吗?你给出的例子是不同的概念。是的,我确实问了STI,但在问题的最后,我还问了是否有更好的解决方案,我刚刚开始理解STI和CTI之间的区别。