Rails多个数据库具有多对多关联

时间:2012-05-17 10:54:26

标签: ruby-on-rails many-to-many associations multiple-databases

我的模型具有多对多关联,例如User&通过RoleAssignment连接的角色

DB1中的

表:

users
role_assignments
DB2中的

表:

roles

我可以使用role_one.users访问DB1中的用户,但我无法使用user_one.roles访问DB2中的角色。它给出了一个例外

ActiveRecord::StatementInvalid: Mysql2::Error: Table 'db2_development.role_assignments' doesn't exist: 
SELECT `roles`.* FROM `roles` INNER JOIN `role_assignments` ON `roles`.`id` = `role_assignments`.`role_id` 
WHERE `role_assignments`.`user_id` = 1

有谁知道如何从用户访问角色,或者如何让rails知道role_assignments驻留在DB1而不是DB2中? thx

2 个答案:

答案 0 :(得分:1)

使用table_name_prefix

所示的class ActiveRecord::Base def self.table_name_prefix "app_name_development." end end class ExternalActiveRecord < ActiveRecord::Base self.abstract_class = true establish_connection "external_development" def self.table_name_prefix "external_app_name_development." end end 解决了我的问题
class Role< ExternalActiveRecord
  ...
end

然后

class User < ActiveRecord::Base
  ...
end

{{1}}

答案 1 :(得分:0)

我自己没有这样做,但您可以将activerecord子类化以维护多个数据库连接。请参阅此博客文章:

http://www.messaliberty.com/2009/02/ruby-how-to-use-multiple-databases-with-activerecord/