Rails 解决多数据库中 has_many 使用的一个坑

hastings · 2016年02月17日 · 最后由 catherine 回复于 2016年02月17日 · 2101 次阅读

背景

  • 项目使用了多个数据库
  • user 表在 system 库
  • friends_relations 表在 thalassa 库
  • thalassa 是默认库

目的

实现查找某个用户的所有好友

实现

user model 的代码

class System::User < System::BaseDb
  self.abstract_class = true
  establish_connection :system
  self.table_name = "system.users"

  has_many :friend_relationships
  has_many :friends, through: :friend_relationships, source: :user
end

friend_relationships model 的代码

class FriendRelationship < ActiveRecord::Base

  belongs_to :user, :class_name => "System::User"
  belongs_to :friend, :class_name => "System::User"
end

这样配置是会报错的

Mysql2::Error: Table 'system.friend_relationships' doesn't exist

在 FriendRelationship 这个 model 中加上一行代码能解决这个问题

class FriendRelationship < ActiveRecord::Base
  self.table_name = "thalassa.friend_relationships"

  belongs_to :user, :class_name => "System::User"
  belongs_to :friend, :class_name => "System::User"
end

你这数据库也太多了,无形中引入了许多不必要的复杂度。

如果每个数据库在不同的服务器怎么办?

如果每个数据库在不同的服务器怎么办?

如果这么多数据库都在一台服务器,为什么不合并。

一般分库也要分服务器吧

入公司前已存在,目前正在合并中

@huacnlee 报告两个 bug

  1. 点“提交回复”后按钮不变灰色,导致重复提交。
  2. 后来点编辑删除,显示删除成功,但帖子还在。

#6 楼 @peter 我之前也发现一样的问题,连着回复了 3 次,回复完发现出现 502 bad 什么的错误。然后好了后就是多余的无法删除。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号