对不同的数据库和表进行一次性查询

时间:2010-10-18 10:52:37

标签: mysql ruby-on-rails wordpress activerecord

我有一个带有wordpress博客的rails应用程序(在/ blog上完全分开)。

客户想要访问rails app主要主页上的最新博客帖子,所以我需要对word-press数据库进行一次性的mysql查询。我将如何在rails应用程序中执行此操作。在数据库方面,word-press完全来自rails。

干杯。

1 个答案:

答案 0 :(得分:9)

假设可以使用相同的数据库凭据并在同一个MySQL服务器上访问它,最简单的方法是运行查询,在查询的FROM子句中指定数据库和表,如下所示:

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

select_one会将列的哈希值返回给值。有关可在connection对象上使用的方法的详细信息,请参阅this documentation

第二个选项是创建ActiveRecord的子类并调用establish_connection

class Blog < ActiveRecord::Base
  establish_connection :blog

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

您还需要在blog文件中创建database.yml数据库条目。有关详细信息,请参阅establish_connection,但遗憾的是,只有查看establish_connection的源代码才能知道以这种方式使用它。

然后您可以在查询中使用博客数据库连接,如下所示:

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

这样做有什么好处现在你有一个很好的地方来定义一个方法(在Blog类中,作为类方法)来获取数据,就像我上面所做的那样。

这两种策略都适用于Rails 2.x或3.x。