RoR框架中Text模型的has_many关联是否可绑定同一模型而非其他模型?
两种场景分别说明
- 默认无额外配置的情况
你给出的原始代码默认要求存在名为Copy的模型:Rails的has_many关联会默认将关联名自动单数化后匹配对应的模型类,:copies经过单数化处理后得到的类名是Copy,因此默认会尝试绑定Copy模型对应的数据表(默认为copies表),通过你指定的original_id外键关联到Text模型的主键。 - 指向同模型同表的自关联场景
不需要额外的Copy模型,只要你手动指定class_name参数明确关联对应的模型为Text即可,调整后的代码如下:
has_many :copies, class_name: "Text", foreign_key: :original_id
这种实现下所有数据都存储在Text模型对应的texts表中,original_id字段用来标记该记录所属的原文本ID,完全不需要额外建表或新增模型。如果需要配置反向关联,可以在Text模型中补充:
belongs_to :original, class_name: "Text", optional: true
配置完成后你可以直接调用:
@text.copies获取该文本对应的所有副本记录@text.original获取该副本对应的原文本记录
内容的提问来源于stack exchange,提问作者Maxime
相关产品推荐
相关产品推荐

