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

Rails 6.1多数据库配置下非主库ApiLog无法创建记录如何解决?

问题根因

Rails 6+ 多数据库规范要求connects_to声明只能放在ActiveRecord::Base或者它的直接子类的抽象类上,你之前的两种写法都违反了规范:

  • 加self.abstract_class = true:抽象类无法被实例化,所以写操作(create/save等)报错
  • 去掉self.abstract_class = true:具体业务模型不允许直接声明connects_to,直接报错

你现有database.yml的多库配置、迁移配置都正确,无需调整,仅需要调整模型层结构即可解决问题。


解决方案

分两步操作:

  1. 新增api_logs库的抽象基类
    在app/models/目录下新建api_logs_base.rb,内容如下:
# frozen_string_literal: true

class ApiLogsBase < ApplicationRecord
  self.abstract_class = true
  connects_to database: { writing: :api_logs, reading: :api_logs }
end
  1. 修改原ApiLog模型继承该抽象基类
    修改app/models/api_log.rb内容如下:
# frozen_string_literal: true

class ApiLog < ApiLogsBase
  # 无需额外配置table_name,Rails会自动根据类名匹配api_logs表
end

验证效果

修改完成后重启服务,即可正常执行读写操作:

  • 读操作:ApiLog.count、ApiLog.first正常返回
  • 写操作:ApiLog.create(method: 'GET', path: '/test')可正常写入api_logs库的对应表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:15:00