Я делаю это на Rails 4.2, и, похоже, пока это работает.Я не проверял это на последней версии Rails, но это следующий.Драгоценный камень не был сохранен в последнее время, поэтому до сих пор не вынесен вердикт о том, будет ли он отвечать всем моим требованиям.
Во-первых, Назар прав, ссылка должна быть https://github.com/clbustos/rtf, чтобы создать RTFфайлы из контроллера Rails против синтаксического анализа RTF-файлов.
Я пробовал код, указанный в ответах, но существует проблема с использованием send_file в этой реализации.Поскольку send_file предназначен для отправки файла по заданному пути, он не работает, как показано.С другой стороны send_data используется для отправки потока данных непосредственно из приложения Rails.Итак, вот код, который я использовал для создания RTF-документа для прямой загрузки с контроллера.
Базовая настройка:
Gemfile:
gem 'rtf'
Установите гем.
config / initializers / mime_types.rb
Mime::Type.register "text/richtext", :rtf
В каталоге "lib" я создал специальный генератор RTF (Поместить код в контроллер можно для генерации документа RTF для тестирования, ногенерация RTF должна быть в отдельном файле, потому что код для создания документа RTF может быстро получить длинный и на самом деле не принадлежит контроллеру):
lib / rtf_reporting.rb
class RtfReporting
require 'rtf'
def initialize
end
...
def self.get_rtf_document(reporting)
document = RTF::Document.new(RTF::Font.new(RTF::Font::ROMAN, 'Times New Roman'))
document.paragraph do |p|
p << "This is the first sentence in the paragraph. TESTING ID = #{reporting.id}"
p << "This is the second sentence in the paragraph. "
p << "And this is the third sentence in the paragraph."
end
return document.to_rtf
end
end
Контроллер:
app / controllers / reportings_controller.rb
class ReportingsController < ApplicationController
require 'rtf_reporting'
...
def show
...
respond_to do |format|
format.rtf do
send_data RtfReporting.get_rtf_document(@reporting), :type=>"text/richtext",
:filename => "your_file_name.rtf",
:disposition => 'attachment'
end
end
end
end
Надеюсь, это кому-нибудь поможет.Оригинальные ответы в этом посте помогли мне!Я знаю, что самое большое различие между моим ответом и другими ответами - это send_file против send_data, что само по себе является большим делом, но я также хотел дать некоторое представление о том, как бы я организовал свой код, учитывая, что нет файла представления, как естьдля решения на основе HTML или PDF.