Come posso far funzionare has_many con più connessioni al database?più connessioni al database con has_many fino a
Ho un database denominato "master" che contiene le informazioni sulla posizione. Questo è aggiornato da un'applicazione separata. Gli utenti possono avere accesso a molte posizioni, ma tutti gli altri modelli si trovano in un altro database denominato "budget". Ecco come sono configurati i modelli.
# 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
Quando eseguo comandi attraverso irb, ottengo il seguente
> 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
Ho provato ad aggiungere l'ENV rotaie attuali a Place per cercare di ignorare il database predefinito per luogo, come questo: # posto .RB classe punto < ActiveRecord :: Base establish_connection Rails.env belongs_to: user belongs_to: posizione fine
012.#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
Questo non ha aiutato. Qualche idea?
si dovrebbe anche pubblicare il frammento dal vostro file config/database.yml in cui si definiscono i database – Tilo
I aggiornato, grazie per il suggerimento. –