1. ホーム
  2. ruby-on-rails

[解決済み] モデルでヘルパーを使用する:ヘルパーの依存関係を含めるにはどうしたらいいですか?

2022-10-25 20:24:13

質問

テキストエリアからのユーザ入力を処理するモデルを書いています。 以下のアドバイスに従って http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input のアドバイスに従って、before_validateコールバックを使って、データベースに保存する前にモデル内の入力をクリーンアップしています。

私のモデルの関連する部分は次のようになります。

include ActionView::Helpers::SanitizeHelper

class Post < ActiveRecord::Base {
  before_validation :clean_input

  ...

  protected

  def clean_input
    self.input = sanitize(self.input, :tags => %w(b i u))
  end
end

言うまでもなく、これはうまくいきません。 新しいPostを保存しようとすると、以下のエラーが表示されます。

undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>

どうやらSanitizeHelperはHTML::WhiteListSanitizerのインスタンスを作成するようですが、私のモデルに混ぜるとHTML::WhiteListSanitizerを見つけることができないようです。 なぜでしょうか? これを修正するために、私は何をすることができますか?

どのように解決するのですか?

1行目を以下のように変更するだけです。

include ActionView::Helpers

とすると動作します。

UPDATEしてください。 Rails 3用です。

ActionController::Base.helpers.sanitize(str)

クレジットは lornc の回答