2010-10-18 5 views
6

Tengo una aplicación rieles con un blog de wordpress sellotaped en el lado (totalmente separado a/blog).Hacer una consulta de una sola vez a una base de datos diferente y mesa

El cliente quiere de a la última entrada de blog en la página principal de la aplicación de los carriles, por lo que tiene que hacer una consulta MySQL de una sola vez a la base de datos de palabras de prensa. ¿Cómo voy a hacer esto en la aplicación Rails? La palabra-prensa está completamente sperate de los rieles en términos de base de datos.

Saludos.

Respuesta

9

Suponiendo que sea accesible a través de las mismas credenciales de base de datos y en el mismo servidor MySQL, la manera más fácil sería para ejecutar una consulta que especifica la base de datos y tabla en la FROM cláusula de la consulta, como por ejemplo:

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

select_one devolverá un hash de columnas a los valores. Para obtener más información sobre los métodos que puede utilizar en el objeto connection, consulte this documentation.

La segunda opción es crear una subclase de ActiveRecord y llame establish_connection:

class Blog < ActiveRecord::Base 
    establish_connection :blog 

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

También tendrá que hacer una entrada blog base de datos en el archivo de database.yml. Consulte establish_connection para obtener más detalles, aunque desafortunadamente usarlo de esta manera solo se conoce al buscar el código fuente establish_connection.

continuación, puede utilizar la conexión de la base de datos del blog en las consultas, así:

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

Lo bueno de hacerlo de esta manera es que ahora usted tiene un lugar agradable para definir un método (en la clase Blog, como método de clase) para recuperar los datos, como he hecho anteriormente.

Ambas estas estrategias deberían funcionar bien con rieles 2.xo 3.x.

Cuestiones relacionadas