当前位置:  开发笔记 > 后端 > 正文

拥有并且属于与多个数据库的许多关系

如何解决《拥有并且属于与多个数据库的许多关系》经验,为你挑选了2个好方法。

我有一种情况,我有两个模型,公司和权限,其中公司在我的权限数据库的单独数据库中.这是一个拥有并且属于许多关系,因为每个公司可以拥有许多权限,每个权限可以属于许多公司.

拆分两个数据库的原因是公司数据库运行高需求生产应用程序,权限数据库控制另一个应用程序的权限.

使用rails,它会在与主表相同的数据库中查找连接表.例如,如果我执行company.permissions,它会在公司数据库中查找company_permissions.如果我允许.它会在权限数据库中查找.

使用has的最佳解决方案是什么,属于多个数据库的多种关系?



1> JasonOng..:

有趣的问题.对于我自己参考的缘故,让我试着总结一下所提出的解决方案Rails的食谱在这个问题的背景下书.

1)首先添加database.yml

permissions:
  adapter: mysql
  database: permissions
  username: root
  password: 
  socket: /tmp/mysql.sock

2)使Permission模型调用外部数据库

class Permission < ActiveRecord::Base

  establish_connection :permissions

end 

3)使用Permission Id列创建(迁移)权限引用表

4)使用PermissionReference模型为纽带权限模型

class PermissionReference < ActiveRecord::Base

  belongs_to :permission
  has_and_belongs_to_many :companies,
                          :join_table => 'companies_permissions',
                          :foreign_key => 'permission_id'

end

5)最后将公司与许可联系起来

class Company < ActiveRecord::Base

  has_and_belongs_to_many :permissions, 
                          :class_name => 'PermissionReference', 
                          :join_table => 'companies_permissions', 
                          :association_foreign_key => 'permission_id'

end

您可能希望通过子类化调用外部数据库的模型来考虑重构

class External < ActiveRecord::Base

  self.abstract_class = true
  establish_connection :permissions

end

class Permission < External
end



2> Teflon Ted..:

拥有并且属于许多人是古老的,笨重的和有问题的.我建议改用has_many.您可以使用":through"选项指定关系表; 只需选择您希望它驻留在哪个数据库中,并创建一个模型来表示它. http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有