我正在向现有表添加新列summary
。它将包含body
列中HTML的纯文本片段。
我想在运行迁移时为所有现有电子邮件创建摘要。但是,我无法弄清楚如何在迁移中使用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方法?我知道我可以运行正则表达式或其他类似的解决方法,但我仍然希望了解如何将其用于将来的使用。
由于
答案 0 :(得分:4)
由于strip_tags
是一个ActionView方法,并且您的迁移继承自ActiveRecord,因此无法看到ActionView方法。
但是你可以通过这种方式找到他们:
def self.up
ActionController::Base.helpers.strip_tags("<b>TEST</b>")
end
如果尝试包含ActionView变体,则会得到undefined method 'full_sanitizer'
,因为您需要扩展类方法,依此类推。更多的痛苦。
答案 1 :(得分:1)
因为strip_tags超出了范围。您无权访问ActionView :: Helpers :: SanitizeHelper。 见related question
答案 2 :(得分:1)
wesgarrison 的解决方案对我来说对Rails 2.3.5版本不起作用,所以为了使它能够工作,我不得不直接从HTML :: FullSanitizer模块中调用HTML sanitize方法。像这样的迁移:
def self.up
HTML::FullSanitizer.new.sanitize('<p>Test</p>')
end
希望这可以帮助那些和我有同样问题的人。