You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

active_record-acts_as gem子父类关联查询失效问题

问题:切换active_record-acts_as gem后关联查询失效

问题背景

项目原本使用已废弃的acts_as_relation gem,现切换为active_record-acts_as gem,环境为Ruby 3.2.2、Rails 6.1.7.10。

代码与表结构

模型代码

class Product < ActiveRecord::Base
    actable as: :as_product
end

class Car < ActiveRecord::Base
    acts_as :product, as: :as_product
end

class Truck < ActiveRecord::Base
    acts_as :product, as: :as_product
end

表结构定义

  • Product表字段:
    • id
    • as_product_id
    • as_product_type
  • Car表字段:
    • id
    • vin

问题现象

使用acts_as_relation时,Product与Car会自动通过as_product_id和as_product_type字段建立关联,执行p = Product.last; p.vin可直接获取对应Car记录的vin值;切换为active_record-acts_as后,系统不会生成关联查询,执行p.vin时抛出错误:undefined method 'vin' for #<Product>。

迁移变更记录

原使用acts_as_relation时的创建表迁移:

create_table "products", :as_relation_superclass => true do |t|
end

切换gem后执行的修改表迁移:

change_table  :products, :as_relation_superclass => false do |t|
end

内容的提问来源于stack exchange,提问作者Matey Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:33:14