Удалите все теги HTML из атрибутов в направляющих

У меня есть модель Project, и она имеет некоторые текстовые атрибуты, каждый является сводным. У меня есть некоторые проекты, которые имеют теги HTML в сводке, и я хочу преобразовать это в простой текст. У меня есть этот метод, который имеет regex, который удалит все теги HTML.

def strip_html_comments_on_data
  self.attributes.each{|key,value| value.to_s.gsub!(/(<[^>]+>|&nbsp;|\r|\n)/,"")}
end

У меня также есть фильтр before_save

before_save :strip_html_comments_on_data

Проблема состоит в том, что теги HTML все еще там после сохраняют проект. Что я пропускаю?

И, есть ли действительно простой способ назвать тот метод во всех моделях?

Спасибо,

Залог Nicolás Isaza

12
задан Hock 5 April 2010 в 00:17
поделиться

3 ответа

непроверено

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 , и вы готовы идти.

45
ответ дан 2 December 2019 в 02:58
поделиться

Просто используйте текстовый помощник strip_tags (), как указано zetetic

3
ответ дан 2 December 2019 в 02:58
поделиться

Во-первых, проблема в том, что 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
1
ответ дан 2 December 2019 в 02:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: