У меня есть веб-приложение, в котором у меня также есть довольно сложный тип блога. Для этого блога я использую RedCarpet в качестве языка разметки в дополнение к самодельному языку разметки, который очень полезен.
На своем самодельном языке разметки я вызываю Product-views и другие партиалы из приложения. Я использую это в двух разных моделях: BlogPost и Article.
Например, запись в блоге может выглядеть примерно так:
@blog_post.unprocessed_content = "Today I would like to show you this **cool** product that we offer: [[PRODUCT#ID:123]]."
[[PRODUCT#ID:123]] – это мой собственный язык разметки, а крутой – RedCarpet. Я использую метод render_content из ApplicationHelper следующим образом:
processed_content = render_content(@blog_post.unprocessed_content)
который будет выводить
processed_content = "Today I would like to show you a <strong>cool</strong> product that we offer: <h3>Apple</h3><img src="apple.jpg"><p>Apple is a nice fruit.</p>. Price: 1 USD."
Часть «яблоко» извлекается из частичного представления.
Метод в ApplicationHelper использует, например: - частичный рендеринг /blog_post/product_item_with_pic - разметку RedCarpet
Я пишу все статьи/сообщения в блоге в размеченном/необработанном состоянии, но имеет смысл предварительно обработать этот контент, когда я публикую и загружаю render_content() на :before_save
.
Эта проблема
По сути, я хотел бы использовать это :before_save из BlogPost и статьи model, но потом я столкнулся с проблемой, пытаясь сделать вспомогательные вещи внутри модели, и все это становится беспорядочным.
Я пытался использовать:
ApplicationController.helpers.render_content(@blog_post.unprocessed_content)
но тогда он не может найти части вида, такие как /blog_post/product_item_with_pic . Такое ощущение, что я бы просто продолжал сталкиваться с такими проблемами.
Прямо сейчас у меня есть ОЧЕНЬ уродливое решение (которое работает), и оно заключается в том, чтобы предварительная обработка выполнялась в представлении при его загрузке. По сути, в admin::blog_post#show я вызываю render_content, а затем выполняю сохранение. Да, это некрасиво.
Мои вопросы
- Какой был бы самый элегантный способ решить эту проблему?
- Если на самом деле нет хорошего способа, по крайней мере, как я могу получить доступ к частичным, когда я вызываю ApplicationHelper таким образом из модели?
render_content
. - person EugZol   schedule 27.08.2015