Я использую базу данных внешних пользователей для различных проектов.
Теперь у меня есть модель School в моем проекте, в которой есть много пользователей, и пользователи имеют много школ.
class User < ActiveRecord::Base
establish_connection "#{RAILS_ENV}_tunnel"
has_many :memberships
has_many :schools, :through => :memberships
end
class School < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :school
end
Итак, какие у меня сейчас проблемы:
- Я не могу вызвать school.users (потому что таблица членства находится в моей базе данных PROJECT, а не в базе данных exERnal USERS), но я могу позвонить user.schools
- Я не могу обновить таким образом: current_user.school.find (params [: id]). Update_attributes (params [: school]), потому что таким образом он открывает соединение только для READ.
Я понимаю, как я могу взломать эту проблему, т.е.
school.users Я могу позвонить так:
class School < ActiveRecord::Base
has_many :memberships
# has_many :users, :through => :memberships
def users
User.where("users.id in (?)", self.connections.map(&:user_id))
end
end
но этих хаков недостаточно. Потому что теперь я не могу добавлять таких пользователей, как school.users << User.find(203)
или school.users.find(params[:user_id])
и другие функции, которые мне дает отношение has_many.
Итак вопрос заключается в том, как работать с двумя базами данных, которые связаны между собой множеством взаимосвязей с полной поддержкой функций.