0

我以模型的形式使用wysihtml5Post

帖子/_form.html.erb:

<%= f.text_area :content, id: "wysihtml5-textarea",
                          placeHolder: "Content" %>

并将结果显示为raw+ sanitize

显示.html.erb:

<%= sanitize raw(@post.content), :tags => %w(b i u p br) %>

(我只允许b, i, u, p, and br标签)。

这样做的问题是,除了上面提到的那些(b、i、u、p 和 br)之外的 html 标记仍然保存在文本区域中(如果用户单击编辑,它们仍然对用户可见)。我想在用户点击提交后立即删除(就像 WordPress 的文本编辑器是如何做到的)。

有什么建议么?

编辑:

我正在尝试的东西:

post.rb:

  before_save :remove_html_tags

  def remove_html_tags
    self.content.sanitized_allowed_tags.delete 'div'
  end
4

1 回答 1

2

查看 API 文档:http ://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

向下滚动一下,也许这就是你要找的:

class Application < Rails::Application
  config.after_initialize do
    ActionView::Base.sanitized_allowed_tags.delete 'div'
  end
end

更新:如果您想在保存资源之前删除标签,您可以在模型级别通过before_save回调执行此操作。或者在您的控制器中,在#create保存资源之前的操作中。如果您想去除某些标签,那么您可以使用#strip_tags,例如:

before_save do |post|
  post.content = strip_tags(post.content)
end

但由于这是来自 ActiveSupport 的方法,因此您必须在模型中包含该模块:

`ActionView::Helpers::SanitizeHelper`
于 2012-10-21T12:34:07.250 回答