【发布时间】:2010-06-15 04:13:39
【问题描述】:
我正在为不同的项目使用外部用户数据库。
现在我的项目中有 School 模型,它 has_many users 并且 users 有很多学校。
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 数据库中,而不是在外部 USERS 数据库中),但我可以调用 user.schools
- 我无法以这种方式更新:current_user.school.find(params[:id]).update_attributes(params[:school]),因为它以这种方式打开只读连接。
我了解如何解决这个问题,即
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 关系给了我。
所以问题是如何操作两个数据库,这两个数据库通过多对多关系相互连接,并提供完整的功能支持。
【问题讨论】:
标签: ruby-on-rails ruby activerecord