2010-10-18 6 views
6

J'ai une application rails avec un blog wordpress sellotaped sur le côté (totalement séparément sur/blog).Faire une requête unique à une base de données et une table différente

Le client veut être sur le dernier post de blog sur la page d'accueil principale de l'application rails, donc j'ai besoin de faire une requête mysql unique à la base de données word-press. Comment pourrais-je faire cela dans l'application rails? Le mot-presse est complètement sperate de rails en termes de base de données.

Cheers.

Répondre

9

Si l'on suppose qu'il est accessible en utilisant les mêmes informations d'identification de base de données et sur le même serveur MySQL, la façon la plus simple serait d'exécuter une requête spécifiant la base de données et une table dans la clause FROM de la requête, en tant que tel:

ActiveRecord::Base.connection.select_one(
    "SELECT * FROM blog_database.posts ORDER BY created_at DESC LIMIT 1") 

select_one renvoie un hachage de colonnes aux valeurs. Pour plus d'informations sur les méthodes que vous pouvez utiliser sur l'objet connection, voir this documentation.

La deuxième option est de créer une sous-classe de ActiveRecord et appelez establish_connection:

class Blog < ActiveRecord::Base 
    establish_connection :blog 

    def self.most_recent_post 
    connection.select_one("SELECT * FROM posts ...") 
    end 
end 

Vous aurez aussi besoin de faire une entrée de la base de données blog dans votre fichier database.yml. Voir establish_connection pour plus de détails, bien que malheureusement l'utiliser de cette manière est seulement connu en regardant le code source pour establish_connection.

Ensuite, vous pouvez utiliser la connexion de base de données de blog dans les requêtes, comme ceci:

Blog.connection.select_one("SELECT * FROM posts ...") 

Ce qui est bien cette façon de faire est maintenant que vous avez un endroit agréable pour définir une méthode (dans la classe de blog, comme une méthode de classe) pour aller chercher les données, comme je l'ai fait ci-dessus.

Ces deux stratégies devraient fonctionner correctement avec Rails 2.x ou 3.x.

Questions connexes