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

は ActionView メソッドであり、移行は ActiveRecord から継承されるためstrip_tags、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

wesgarrisonのソリューションは、Rails 2.3.5 バージョンでは機能しませんでした。そのため、機能させるには、次のように移行で HTML::FullSanitizer モジュールから HTML サニタイズ メソッドを直接呼び出す必要がありました。

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

これが私と同じ問題を抱えている人に役立つことを願っています。

于 2012-12-27T23:27:49.237 に答える
1

strip_tags は範囲外であるためです。ActionView::Helpers::SanitizeHelper へのアクセス権がありません。関連する質問を参照

于 2010-01-01T03:19:33.013 に答える