У меня есть модель Project, и она имеет некоторые текстовые атрибуты, каждый является сводным. У меня есть некоторые проекты, которые имеют теги HTML в сводке, и я хочу преобразовать это в простой текст. У меня есть этот метод, который имеет regex, который удалит все теги HTML.
def strip_html_comments_on_data
self.attributes.each{|key,value| value.to_s.gsub!(/(<[^>]+>| |\r|\n)/,"")}
end
У меня также есть фильтр before_save
before_save :strip_html_comments_on_data
Проблема состоит в том, что теги HTML все еще там после сохраняют проект. Что я пропускаю?
И, есть ли действительно простой способ назвать тот метод во всех моделях?
Спасибо,
Залог Nicolás Isaza
непроверено
include ActionView::Helpers::SanitizeHelper
def foo
sanitized_output = sanitize(html_input)
end
где html_input - строка, содержащая теги HTML.
РЕДАКТИРОВАТЬ
Вы можете удалить все теги, передав : tags => []
в качестве опции:
plain_text = sanitize (html_input,: tags => [])
Хотя прочитав документы , я вижу, что есть способ получше:
plain_text = strip_tags (html_input)
Затем превратите его в предварительный фильтр для smotchkiss , и вы готовы идти.
Просто используйте текстовый помощник strip_tags (), как указано zetetic
Во-первых, проблема в том, что Array # each
возвращает входной массив независимо от содержимого блока. Пара человек только что просмотрели массив # каждый
вместе со мной в вопросе, который я задал: «Вернуть хеш с измененными значениями в Ruby» .
Во-вторых, кроме Array # каждый
на самом деле не делает то, что вы хотите, я не думаю, что вам все равно стоит это делать.Зачем вам нужно запускать этот метод для ВСЕХ атрибутов модели?
Наконец, почему бы не сохранить ввод HTML от пользователей и просто использовать стандартный помощник h ()
, когда выводить его?
# this will output as plain text
<%=h string_with_html %>
Это полезно, потому что вы можете просмотреть базу данных и увидеть неизмененные данные точно в том виде, в каком они были введены пользователем (при необходимости). Если вам действительно нужно преобразовать в обычный текст перед сохранением значения, решение @ zetetic поможет вам начать работу.
include ActionView::Helpers::SanitizeHelper
class Comment < ActiveRecord::Base
before_save :sanitize_html
protected
def sanitize_html
self.text = sanitize(text)
end
end