【问题标题】:how to use strip_tags and truncate inside my Model.rb?如何在我的 Model.rb 中使用 strip_tags 和截断?
【发布时间】:2011-06-28 20:54:59
【问题描述】:

strip_tags 在我的视图页面中适用于我,但不适用于我的模型(我在 before_save 函数中使用它)

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

您还可以像这样访问模型中的助手:

ActionController::Base.helpers.strip_tags(text)

【讨论】:

  • 对 OP 实际问题的唯一真正正确答案,在底部徘徊。
  • 这是回答实际问题的唯一正确答案。我同意
  • 很高兴你是个叛逆者 @Aleks 先生。谢谢。
  • strip_tags 只是Loofah.fragment(html_frag).text 周围的一个助手,可以直接在模型中使用
  • @Zeragamba 是的,但除非您已经将 Loofah 添加到 Gemfile,否则使用它是不安全的,rails 可以随时更改方法的实现并删除依赖项,您的代码将会中断。
【解决方案2】:
ActionView::Base.full_sanitizer.sanitize(your_html_string)

这对你有用。 或者您可以定义一个帮助器,例如:

def strip_html_tags(string)
    ActionView::Base.full_sanitizer.sanitize(string)
end

然后像这样使用:

strip_html_tags(your_html_string)

要删除某些特定标签,请传递附加参数。 来源:Sanitize Rails API Dock

【讨论】:

    【解决方案3】:

    因此,我不喜欢这些解决方案中的任何一个,因为我宁愿将视图功能排除在我的模型之外。因此,我使用了一个装饰器(如https://github.com/drapergem/draper),然后能够使用辅助方法快捷方式h.strip_tags

    【讨论】:

      【解决方案4】:

      穷人的截断器:

      my_string[0, 145] 
      

      它可以在模型中工作,而无需从 ActionController::Base 调用辅助方法。它不会为您添加省略号,但这可能很容易修复...

      【讨论】:

        【解决方案5】:

        strip_tags 是一种辅助方法,通常在模型中不提供辅助方法。

        您可能想改用sanitize gem 之类的东西

        【讨论】:

        • 从纯粹的正统观点来看,这是对的,但你有一个图书馆可以完成这项任务,但你不能使用它,这难道不是一种耻辱吗?查看 cmets 中链接到问题的重复问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-29
        • 1970-01-01
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        相关资源
        最近更新 更多