2011-06-09 3 views
1

RoR = 2.3.11 Ruby = 1.8.7 Gem = 1.3.7Comment obtenir des données d'une autre base de données dans ma base de données?

J'ai une base de données (appeler "First") avec 4 tables. Et j'ai une autre base de données (appelez cette base de données "Second"), (avec un autre mot de passe). Je veux prendre des courriels (sur le terrain) de Second et la table s'il y a des mises à jour était et l'insertion dans la base de données First.

Question: Comment je peux le faire?

Répondre

4

Vous pouvez définir différentes bases de données dans votre base de données.yml.

first: 
    adapter: mysql 
    database: first_development 
    username: user 
    password: pwd 
    host: localhost 

second: 
    adapter: mysql 
    database: second_development 
    username: user 
    password: pwd 
    host: localhost 

puis connectez vos modèles à différentes bases de données en utilisant ActiveRecord::Base.establish_connection

class A < ActiveRecord::Base 

    ActiveRecord::Base.establish_connection "first" 

end 

class B < ActiveRecord::Base 

    ActiveRecord::Base.establish_connection "second" 

    def self.sync 
    A.all.each do |record| 
    B.create(:email => record.email) 
    end 
    end 

end 

J'ai ajouté une méthode simple de synchronisation appelé qui peut être un point de départ pour votre problème de synchronisation,

+0

parfait, maintenant je comprends comment ça marche, merci! Mais une question esle. par exemple dans le modèle (classe A) je devrais créer un certain défaut où je prends l'information de la base de données? P.S - dans database.yml. Si ma deuxième base de données est en mode production uniquement, je peux juste ajouter comme vous l'avez écrit, mais au lieu de la seconde, écrire my_database, oui? –

+0

Voir ma mise à jour pour un exemple sur la façon dont une méthode pourrait ressembler (sans savoir exactement à quoi ressemble votre modèle). Je ne comprends pas la deuxième partie de votre question. – auralbee

+0

merci, je vais tester maintenant. Deuxième partie de ma question, désolé. Je voulais dire, si mon deuxième (base de données appelée uzez, où les gestionnaires de table avec champ email) est en mode production sur un autre hôte, donc je remplace juste cette "base de données: second_development" à "database: uzez_production"? SO, classe A = répondants 9avec un champ email), et classe B (une autre base de données avec des gestionnaires de table avec un courrier électronique). Oui? Et dernière question, cette méthode de synchronisation je devrais quelque part écrire? –

Questions connexes