我很难使用has_many :through
关联,其中一些表位于单独的数据库中。
# database_one
class Input < ApplicationRecord
belongs_to :user # Works great
end
# database_two
class User < AbstractClass
belongs_to :group # Works great
has_many :inputs # Works great
end
# database_two
class Group < AbstractClass
has_many :users # Works great
has_many :inputs, through: :users # Does not work at all
end
class AbstractClass < ApplicationRecord
self.abstract_class = true
establish_connection "database_two_#{Rails.env}".to_sym
end
因此,使用上面的代码,我可以执行以下操作:
Group.first
=> #<Group id: 1...
User.first
=> #<User id: 1...
User.first.inputs
=> #<ActiveRecord::Associations::CollectionProxy []>
Group.first.users
=> #<ActiveRecord::Associations::CollectionProxy []>
但它不会让我执行以下操作:
Group.first.inputs
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "users" does not exist
LINE 1: SELECT "inputs".* FROM "inputs" INNER JOIN "users" ON "inpu...
^
: SELECT "inputs".* FROM "inputs" INNER JOIN "users" ON "inputs"."user_id" = "users"."id" WHERE "users"."group_id" = $1 LIMIT $2
看起来不可能做INNER JOIN
跨两个数据库?我可以做些什么来缓解这种情况吗?我尝试将此方法添加到AbstractClass
但不幸的是它没有解决任何问题:
def self.table_name_prefix
"database_two_#{Rails.env}."
end
作为解决方法,我已将以下内容添加到组模型中,但这不是我正在寻找的解决方案。
def inputs
Input.where(id: users.ids)
end