首页 > 解决方案 > 多个数据库上的rails 6 has_many关系

问题描述

我是初级 RoR 开发人员。我有这个架构:

在我的第一个数据库中,我存储Vacancies在我存储的第二个数据库中Users

空缺控制器

def create
    @vacancy = Vacancy.new(vacancy_params)
    ActiveRecord::Base.connected_to(database: { writing: :secondary }) do
        @vacancy.save
    end
end 

如您所见,我在辅助数据库上使用 rails 6 activeRecord 功能进行存储。

Vacancy.rb 模型有下一个关系:belongs_to :user

User.rb 模型有下一个关系:has_many :vacancies,dependent: :delete_all

所以第一个数据库没有空缺表,第二个数据库没有用户表。

尝试创建时出现此错误Vacancy

Mysql2::Error: Table 'secondary.users' doesn't exist

我认为发生这种情况是因为第一个数据库没有空缺表,第二个数据库没有用户表。我也不能为每个数据库创建任务表。我该如何解决?

谢谢

标签: ruby-on-railsactiverecordruby-on-rails-6

解决方案


对于 Google 员工的功能,解决方案是定义这样的关系

空缺模型

def user
    ActiveRecord::Base.connected_to( database: { reading: :primary } ) do
        User.where( id: user_id ).first
    end
end

我不知道这是否是优雅的解决方案,但它有效。


推荐阅读