我的模型具有多对多关联,例如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
答案 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/