ruby-on-rails - 通过has_many与多个数据库连接

标签 ruby-on-rails activerecord ruby-on-rails-3.1 has-many-through

如何通过使用多个数据库连接来创建has_many?

我有一个名为“master”的数据库,其中包含位置信息。这是从单独的应用程序更新的。用户可以访问许多位置,但是所有其他模型都位于另一个名为“预算”的数据库中。以下是模型的设置方法。

# 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的默认数据库,如下所示:
#place.rb
类Place 建立连接Rails.env
当属:用户
所属:位置
结尾
#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

那没有帮助。有任何想法吗?

最佳答案

一位 friend 为我回答了这个问题,我认为这可能对其他人有用。

class Location < ActiveRecord::Base
  #establish_connection "master"
  def self.table_name() "master.locations" end
  has_many :places
  has_many :users, :through => :places
end

关于ruby-on-rails - 通过has_many与多个数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8302482/

相关文章:

javascript - bootsy 编辑器不适用于通过nested_form gem 添加的嵌套属性

sql - 如何找到同时拥有猫和狗的用户?

ruby-on-rails - 在 ruby​​ 中按年龄范围对用户进行分组

ruby-on-rails - ActionView::Template::Error,多个未知的正则表达式选项问题

ruby-on-rails - 在 Rails 中运行 bundle exec rspec spec/requests/static_pages_spec.rb 时出错

iphone - 大量位置地理编码的策略

ruby-on-rails - Elasticsearch 6.3 术语过滤器不适用于整数列

ruby-on-rails - ActionCable - 无法在生产环境中升级到 WebSocket

ruby-on-rails - 如何在 Arel 中对连接列进行类型转换

ruby-on-rails - 带有嵌套对象的 Rabl 缓存