1

我正在向summary现有表中添加一个新列 , 。它将包含来自该列的 HTML 的纯文本片段body

我想在运行迁移时为所有现有电子邮件创建摘要。但是,我不知道如何在迁移中使用 strip_tags。

这是我到目前为止所拥有的:

class AddSummaryToEmails < ActiveRecord::Migration
  self.up
    add_column :emails, :summary, :string, :limit => 100

    Email.reset_column_information
    Emails.all.each do |email|
      email.update_attributes(:summary => strip_tags(email.body))
    end
  end

  ...

end

当然,这不起作用: undefined method 'strip_tags' for #<ActiveRecord::ConnectionAdapters::MysqlAdapter:0xb6e29be8>

如何在迁移中访问 strip_tags 方法?我知道我可以运行正则表达式或其他类似的解决方法,但我仍然热衷于了解如何执行此操作以备将来使用。

谢谢

4

3 回答 3

5

由于strip_tags是一个 ActionView 方法,并且您的迁移继承自 ActiveRecord,因此它看不到 ActionView 方法。

不过,您可以通过以下方式找到它们:

def self.up
  ActionController::Base.helpers.strip_tags("<b>TEST</b>")
end

如果您尝试包含 ActionView 变体,您会得到undefined method 'full_sanitizer',因为您需要扩展类方法,等等。更多的是一种痛苦。

于 2010-01-01T04:51:04.450 回答
1

因为 strip_tags 超出范围。您无权访问 ActionView::Helpers::SanitizeHelper。查看相关问题

于 2010-01-01T03:19:33.013 回答
1

wesgarrison的解决方案不适用于 Rails 2.3.5 版本,因此为了使其正常工作,我必须在迁移中直接从 HTML::FullSanitizer 模块调用 HTML sanitize 方法,如下所示:

def self.up
  HTML::FullSanitizer.new.sanitize('<p>Test</p>')
end

希望这可以帮助和我有同样问题的人。

于 2012-12-27T23:27:49.237 回答