Rails, CKEditor; попытка сделать частичное на основе содержимого отредактированной строки - PullRequest
1 голос
/ 09 июля 2011

Я только что включил ckeditor в мое приложение rails;работает отлично.У меня есть модель PageComponent, в которой есть текстовое поле, в котором хранится содержимое, которое затем отображается в представлении представления, например:

<%= raw @page_component.page_content %>

Мне просто пришла в голову мысль, что, возможно, я мог бы включить выражение erb вТекст атрибута page_content, например:

<%= render :partial=>'some_partial' %>

, но он не работает.Текст правильно сохраняется в поле, но на странице ничего не появляется.Это был просто базовый тест идеи, и я не уверен, что это даже возможно, поскольку рельсы, возможно, уже прошли через весь процесс рендеринга ответов.Возможно ли сделать что-то подобное, и если да, то как?

1 Ответ

1 голос
/ 09 июля 2011

Как вы сказали, теги <%= %> являются тегами ERB , поэтому один из способов решения вашей проблемы - просто использовать класс ERB , предоставляемый в Ruby * 1007. * (и уже включены в ваши представления и помощники) для перевода и выполнения содержимого любых тегов в строке page_content и возврата вам полученной строки. Параметр binding(), передаваемый методу результата, содержит текущий контекст (Rails), позволяющий интерпретировать строку так же, как нормальное представление Rails.

Вы можете поместить следующий метод в ваш помощник PageComponent:

def translate_erb(string)
  ERB.new(string, 0).result(binding()) # 0 is a 'safety level' (see docs)
end

Тогда, на ваш взгляд, вызовите этот метод так:

<%= raw translate_erb(@page_component.page_content) %>

Хотя это будет работать, я настоятельно рекомендую против этого. Реализуя это, вы предоставляете пользователю много большей гибкости, чем он когда-либо должен иметь, и, как следствие, это полная катастрофа безопасности. В идеале вы должны создать собственную разметку или использовать какой-либо другой метод для добавления этой функциональности таким образом, чтобы вы не давали пользователю полную свободу делать все, что он хочет. Однако, если вы понимаете это, это жизнеспособный метод. Просто будьте очень осторожны, как вы его используете!

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