具有多个数据库连接
如何通过使用多个数据库连接来创建has_many?
我有一个名为“主”的数据库,它包含位置信息。 这是从一个单独的应用程序更新。 用户可以访问多个位置,但所有其他模型都位于另一个名为“预算”的数据库中。 以下是如何设置模型。
# place.rb
class Place < ActiveRecord::Base
belongs_to :user
belongs_to :location
end
# user.rb
class User < ActiveRecord::Base
has_many :locations, :through => :places
has_many :places
end
# location.rb
class Location < ActiveRecord::Base
establish_connection "master"
has_many :places
has_many :users, :through => :places
end
当我通过irb运行命令时,我得到以下结果
> Location.first.places.create(:user_id => 1)
> #<Place id: 1, user_id: 1, location_id: 1, created_at: "2011-11-28 20:58:43", updated_at: "2011-11-28 20:58:43">
> Location.first.places
> [#<Place id: 1, user_id: 1, location_id: 1, created_at: "2011-11-28 20:58:43", updated_at: "2011-11-28 20:58:43">]
> Location.first.users
> [#<User id: 1, username: "toby", role: "guest", created_at: "2011-11-28 17:45:40", updated_at: "2011-11-28 17:45:40">
> User.first.locations
> Mysql2::Error: Table 'master.places' doesn't exist: SELECT `locations`.* FROM `locations` INNER JOIN `places` ON `locations`.`id` = `places`.`location_id` WHERE `places`.`user_id` = 1 ActiveRecord::StatementInvalid: Mysql2::Error: Table 'master.places' doesn't exist: SELECT `locations`.* FROM `locations` INNER JOIN `places` ON `locations`.`id` = `places`.`location_id` WHERE `places`.`user_id` = 1
我尝试添加当前的rails env到Place来尝试覆盖缺省数据库的位置,如下所示:#place.rb class Place <ActiveRecord :: Base establish_connection Rails.env belongs_to:user belongs_to:location end
#database.yml
master:
adapter: mysql2
encoding: utf8
reconnect: false
database: master
pool: 5
username: root
password:
socket: /var/run/mysqld/mysqld.sock
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: budget_development
pool: 5
username: root
password:
socket: /var/run/mysqld/mysqld.sock
这没有帮助。 有任何想法吗?
一位朋友为我回答了这个问题,我认为这可能对其他人有用。
class Location < ActiveRecord::Base
#establish_connection "master"
def self.table_name() "master.locations" end
has_many :places
has_many :users, :through => :places
end
答案适用于我,但我在关系表中使用此版本:
self.table_name = "master.locations"
链接地址: http://www.djcxy.com/p/56467.html
上一篇: multiple database connections with has
下一篇: How can I simplify/improve the performance of this MySQL query?