0

RoleAssignmentを介して接続されたUser&Roleなど、多対多の関連付けを持つモデルがあります

DB1のテーブル:

users
role_assignments

DB2のテーブル:

roles

を使用してDB1のユーザーにアクセスできますが、を使用しrole_one.usersてDB2のロールにアクセスできませんuser_one.roles。例外があります

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

ユーザーからロールにアクセスする方法、またはrole_assignmentsがDB2ではなくDB1にあることをレールに知らせる方法を知っている人はいますか?どうも

4

2 に答える 2

1

http://emphaticsolutions.com/2009/11/23/has_many_through_across_databases.htmltable_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
于 2012-05-18T06:55:08.550 に答える
0

私は自分でそれをしていませんが、複数のデータベース接続を維持するためにactiverecordをサブクラス化することができます。このブログ投稿を参照してください:

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

于 2012-05-17T11:42:13.190 に答える