Отображение крошечных тегов mce в rails 3

Я пытаюсь сохранить содержимое tinyMCE в столбце «детали».

Теперь, когда я отображаю содержимое, оно отображается со всеми тегами <p> , тегами <i> и т. д. Это функция безопасности в rails3.

Но я не хочу, чтобы теги <p> отображались, я хочу, чтобы они отображались как HTML.

Один из способов, который я нашел, был <%= something.detail.html_safe %>

другой способ, которым я думал, состоял в том, чтобы создать функцию в модели, например

def detail_safe
    return self.detail.html_safe
  end

и отображать с помощью <%= something.detail_safe %>

В любом случае мне нужно изменить тег <%= %> во многих местах. Есть ли более простое решение? Или я должен вручную изменить в каждом месте?

Спасибо.


person Gaurav Shah    schedule 27.05.2011    source источник


Ответы (2)


В модели:

def detail
  self[:detail].html_safe if self[:detail]
end

Обратите внимание, что в этом случае вы всегда будете получать вывод html_safe, когда будете выполнять model_object.detail.

person amit_saxena    schedule 27.05.2011
comment
Не вызовет ли это бесконечный цикл? - person Wukerplank; 27.05.2011
comment
Пожалуйста, посмотрите на редактирование. Идея заключалась в том, чтобы переопределить метод доступа к атрибуту ActiveRecord. - person amit_saxena; 27.05.2011
comment
def detail self.detail.html_safe end приведет к бесконечному циклу :) - person Gaurav Shah; 30.05.2011

Независимо от того, как вы это сделаете, вам придется изменить все ваши <%= %>.

Ваши варианты:

<%= something.detail_safe %>
<%= something.detail.html_safe %>
<%= raw something.detail %>

Единственный другой вариант, который я могу придумать, это отключить защиту от XSS, но не делайте этого!

person Wukerplank    schedule 27.05.2011