我正在为不同的项目使用外部用户数据库。
现在我的项目中有学校模型,其中有很多用户,用户有很多学校。
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我可以这样打电话:
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])
以及其他功能等用户,所以我们之间的关系很有用。
所以问题是如何使用两个数据库进行操作,这两个数据库通过多个关系连接到全部功能支持。
答案 0 :(得分:3)
我认为在Rails中有一种方法可以完全支持这一功能 - 我认为你最好尝试使用类似MySQL's federated tables之类的东西来带遥控器DB表进入生产数据库。
答案 1 :(得分:0)
在oracle中,我将使用数据库链接。
我不完全确定,但我发现在mysql中你可以写
select * from db1.users , db2.schools where db1.users.school_id = db2.schools.id
那么你可以通过在模型中明确声明表名来在Rails中使用它:
class School
set_table_name "db2.schools"
end
这有帮助吗?