2009-09-01 19 views
13

Aplikacja My Rails 2.3 generuje stronę w HTML/CSS lub jako dokument tekstowy. Chciałbym zapisać ten plik html w systemie plików jako plik statyczny (np. Plik nazwa_pliku.html lub nazwa_pliku.doc). Planuję mieć podgląd akcji z pełną renderowaną stroną i przycisk "zapisz raport". Nasi użytkownicy uzyskają dostęp do tych statycznych plików później. (Zapiszę ścieżkę do bazy danych).Jak zapisać renderowany widok jako plik statyczny?

Wszelkie sugestie, jak to zrobić?

Jestem w trakcie tworzenia pliku i zapisywania go, ale nie jestem pewien, jak uzyskać do niego renderowany widok. Punkty bonusowe, jeśli ktoś wie, jak je zapisać do S3! Wielkie dzięki!

Odpowiedz

27

render_to_string jest twoim przyjacielem. Jeden masz go w łańcuchu, nagrać go do pliku w zwykły sposób.

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 

ile idzie S3, zobacz aws-s3 gem. Wydaje się, że robi to, o co prosisz. Użycie jest trochę podobne.

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

Baw się dobrze i nie biegaj za pomocą nożyczek.

+0

render_to_string !!! To fantastycznie. Ukryty w krótkim akapicie w ADwR. Pracował jak urok. Kiedy otrzymam wszystkie dane, S3 będzie następny. Dzięki za tonę! – antm

0

Innym sposobem jest dodanie do kontrolera sterownika after_action, a w przypadku tej akcji użycie response.body w celu uzyskania dostępu do renderowanej treści. W ten sposób kontroler może reagować na klienta w normalny sposób, jednocześnie zapisując renderowane treści w bazie danych.

Powiązane problemy