Rails 5.2中STI父类的父子关联如何指定实际外键?
解决Rails STI关联中外键不匹配的问题
你的问题根源在于DataProcess模型的has_many关联定义——在STI场景下,Rails默认会以当前子类名称(DataProcess)推断外键字段(即data_process_id),但你的数据库实际使用business_process_id作为外键,导致查询报错。
只需在has_many关联中显式指定foreign_key参数,搭配明确的class_name配置即可修复:
class DataProcess < BusinessProcess has_many :treatments, class_name: "Treatment", foreign_key: "business_process_id", inverse_of: :parent, dependent: :destroy end
关键配置说明:
foreign_key: "business_process_id":强制Rails在查询时使用该字段作为外键,替代默认生成的data_process_idclass_name: "Treatment":明确关联的目标模型类,STI场景下显式指定可避免自动推断出错- 保留
inverse_of: :parent和dependent: :destroy以维持原有的关联逻辑和数据清理规则
修改后执行@data_process.treatments.first,Rails将生成正确的SQL查询,使用business_process_id作为过滤条件。
内容的提问来源于stack exchange,提问作者user1185081
相关产品推荐
相关产品推荐

