Шаблоны Rails 3: рендеринг нескольких форматов с использованием одного и того же обработчика шаблонов - PullRequest
2 голосов
/ 29 декабря 2010

Из одного файла представления, содержащего, например, код LaTeX со вставками ERB, я хотел бы иметь возможность:

  1. визуализировать в исходный файл LaTeX, оценивая ERB

  2. визуализация в PDF путем компиляции предыдущего результата с использованием пользовательской функции latex_to_pdf ()

Первый случай может быть достигнут при регистрации обработчика шаблона:

ActionView::Template.register_template_handler :latex, LatexSource

где LatexSource является подклассом ActionView :: Template :: Handler, реализующим вызов (шаблон) или компиляцию (шаблон).

Это позволяет файлу представления "action.tex.latex"быть доступным и правильно обработанным как «controller / action.tex».

Второй случай выглядит намного сложнее, хотя:

  • как запросить «контроллер / действие». pdf"отправить в обработчик шаблона, как если бы это был" controller / action.tex ", и передать результат через latex_to_pdf () перед отправкой ответа пользователю?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 02 февраля 2011

Я не использовал его сам (пока), но похоже, что https://github.com/jacott/rails-latex может сделать эту работу за вас.

0 голосов
/ 29 декабря 2010

Не могли бы вы просто зарегистрировать другой обработчик шаблона :pdf, чей метод compile похож на этот?:

def compile
   latex_to_pdf LatexSource.compile(template)
end

Обновление: Хорошо, верно, это приводит к необходимости дублирования представления ( action.tex.latex , action.tex.pdf ).

Следующая идея:

respond_to do |format| 
  format.latex 
  format.pdf { render :file => latex_to_pdf(render) } 
end

Насколько я помню, render возвращал отрендеренный шаблон как String в Rails 2.3. Я не знаю, как он ведет себя в Rails 3.

Вы можете поэкспериментировать с рендером или _render_template . Если это сработает, мы могли бы подумать о том, как сделать это более сухим и удобным для нескольких действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...