2009-09-01 17 views
13

La aplicación My Rails 2.3 genera una página en HTML/CSS o como una palabra doc. Me gustaría guardar ese archivo html en el sistema de archivos como un archivo estático (es decir, filename.html o filename.doc). Planeo tener una acción de vista previa con la página completa y un botón 'guardar informe'. Nuestros usuarios tendrán acceso a esos archivos estáticos más adelante. (Voy a guardar el camino a la base de datos.)¿Cómo guardar una vista procesada como un archivo estático?

¿Alguna sugerencia de cómo hacer esto?

Estoy tan lejos de crear un archivo y guardarlo, pero no estoy seguro de cómo obtener mi vista representada en él. ¡Puntos de bonificación si alguien sabe cómo guardarlo hasta S3! ¡Muchas gracias!

Respuesta

27

render_to_string es tu amigo. Uno lo tiene en una cadena, grábelo para archivar de la forma habitual.

class FooController 
    def save_foo_to_disk 
    data = render_to_string(:action => :index) 
    File.open(file_path, "w"){|f| f << data } 
    flash[:notice] = "saved to #{file_path}" 
    end 
end 

En cuanto a S3, ver aws-s3 gem. Parece que hace lo que buscas. El uso es un poco como esto.

AWS::S3::Base.establish_connection!(
    :access_key_id  => 'abc', 
    :secret_access_key => '123' 
) 
S3Object.store(file_name, data, 'bucket-name') 

divertirse, y no se ejecutan con unas tijeras.

+0

render_to_string !!! Eso es fantástico. Escondido en un breve párrafo en ADwR. Trabajado como un encanto. Una vez que tenga todos los guardados funcionando, S3 será el siguiente. ¡Gracias una tonelada! – antm

0

Otra forma es agregar un after_action al controlador, y en esa acción usando response.body para acceder al contenido renderizado. De esta forma, su controlador puede responder al cliente como siempre, mientras tanto, puede guardar el contenido renderizado en la base de datos.

Cuestiones relacionadas