2009-09-01 9 views
13

L'application My Rails 2.3 génère une page en HTML/CSS ou en document Word. Je voudrais enregistrer ce fichier html sur le système de fichiers en tant que fichier statique (par exemple, filename.html ou filename.doc). Je prévois d'avoir une action de prévisualisation avec la page entièrement rendue et un bouton «Enregistrer le rapport». Nos utilisateurs accèderont à ces fichiers statiques plus tard. (Je vais enregistrer le chemin de la db.)Comment enregistrer une vue rendue en tant que fichier statique?

Des suggestions pour ce faire? Je suis aussi loin que de créer un fichier et de l'enregistrer, mais je ne suis pas sûr de savoir comment obtenir ma vue rendue à l'intérieur. Points bonus si quelqu'un sait comment l'enregistrer jusqu'à S3! Merci beaucoup!

Répondre

27

render_to_string est votre ami. Celui que vous avez dans une chaîne, brûlez-le à classer de la manière habituelle.

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 ce qui concerne S3, voir aws-s3 gem. Cela semble faire ce que vous voulez. L'utilisation est un peu comme ça.

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

Amusez-vous et ne courez pas avec des ciseaux.

+0

render_to_string !!! C'est fantastique. Caché dans un court paragraphe dans ADwR. Travaillé comme un charme. Une fois que toutes les sauvegardes auront fonctionné, S3 sera le suivant. Merci beaucoup! – antm

0

Une autre méthode consiste à ajouter un after_action au contrôleur et, dans cette action, à utiliser response.body pour accéder au contenu rendu. De cette façon, votre contrôleur peut répondre au client comme d'habitude, enregistrer le contenu rendu à la base de données en attendant.

Questions connexes