Mysql
 sql >> Base de données >  >> RDS >> Mysql

Effectuez une requête unique vers une base de données et une table différentes

En supposant qu'il soit accessible en utilisant les mêmes informations d'identification de base de données et sur le même serveur MySQL, le moyen le plus simple serait d'exécuter une requête en spécifiant la base de données et la table dans le FROM clause de la requête, en tant que telle :

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

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

La deuxième option consiste à créer une sous-classe d'ActiveRecord et à appeler establish_connection :

class Blog < ActiveRecord::Base
  establish_connection :blog

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

Vous devrez également créer un blog entrée de base de données dans votre database.yml dossier. Voir establish_connection pour plus de détails, bien que malheureusement l'utiliser de cette manière ne soit vraiment connu qu'en regardant le code source de establish_connection .

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

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

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

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