Как сохранить рендер-представление в виде статического файла?

Приложение My Rails 2.3 создает страницу в HTML/CSS или в виде слова doc. Я хотел бы сохранить этот html файл в файловой системе как статический файл (например, filename.html или filename.doc). Я планирую иметь действие предварительного просмотра с полностью отображаемой страницей и кнопкой "Сохранить отчет". Наши пользователи будут обращаться к этим статическим файлам позже. (Я сохраню путь к db.)

Любые предложения по тому, как это сделать?

Я до создания файла и сохранения его, но я не уверен, как получить его визуализированный вид. Бонусные очки, если кто-то знает, как сохранить его до S3! Большое спасибо!

Ответы

Ответ 1

render_to_string является вашим другом. Один из них у вас есть в строке, записать его в файл обычным способом.

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

Что касается S3, см. aws-s3 gem. Кажется, ты делаешь то, что тебе нужно. Использование немного похоже на это.

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

Удачи и не бегайте с помощью ножниц.

Ответ 2

Другим способом является добавление after_action к контроллеру и в этом действии с помощью response.body для доступа к отображаемому контенту. Таким образом, ваш контроллер может реагировать на клиента как обычно, сохраняя отображаемый контент в базе данных тем временем.