44 votes

Comment travailler avec deux bases de données différentes dans des rails avec des enregistrements actifs?

Je dois utiliser différentes connexions de base de données dans différents modèles Rails. Y a-t-il un moyen pas si malin de faire ça?

N'importe quel lien ou mot clé de recherche serait génial :)

116voto

mikej Points 30224

Ajouter de nouvelles sections à votre database.yml par exemple

 other_development:
  adapter: mysql
  database: otherdb_development
  username: root
  password:
  host: localhost

other_production:
  adapter: mysql
  database: otherdb_production
  username: root
  password:
  host: localhost
 

Ajouter une classe en lib/other_database.rb

 class OtherDatabase < ActiveRecord::Base
  establish_connection "other_#{RAILS_ENV}"
end
 

puis pour chaque modèle qui ne fait pas partie de la sous-classe de base de données par défaut de OtherDatabase par exemple:

 class MyModel < OtherDatabase
   # my model code...
end
 

13voto

penger Points 916

J'ai utilisé ce qui suit pour me connecter à 2 db dans la même application. Je les mets dans le dossier lib car tout y est chargé.

 require 'active_record'

class OldDatabase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection(
  :adapter  => 'mysql',
  :database => 'weather',
  :host     => 'localhost',
  :username => 'root',
  :password => 'password'
  )
end

class NewDatabase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection(
  :adapter  => 'mysql',
  :database => 'redmine',
  :host     => 'localhost',
  :username => 'root',
  :password => 'password'
  )
end

class WeatherData < OldDatabase
end

class Board < NewDatabase
end
 

J'espère que cela pourra aider

10voto

nitecoder Points 4561

Mikej a raison. Cependant, j’ai écrit un bijou qui rend le code du modèle à connecter un peu plus propre, jetez-y un œil .

9voto

penkovsky Points 100

Mise à jour pour Rails 3.x:

 class MyModel < ActiveRecord::Base
  establish_connection "other_#{Rails.env}"
end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X