Во-первых, проблема в том, что Array#each
возвращает входной массив независимо от содержимого блока. Пара человек только что обсудили со мной вопрос Array#each
: "Вернуть хеш с измененными значениями в Ruby" .
Во-вторых, кроме того, что Array#each
на самом деле не делает то, что вы хотите здесь, я не думаю, что вы все равно должны это делать. Зачем вам нужно запускать этот метод для ALL атрибутов модели?
Наконец, почему бы не сохранить ввод 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