Ответ 1
Просто измените первую строку следующим образом:
include ActionView::Helpers
который заставит его работать.
ОБНОВЛЕНИЕ: Для Rails 3 используйте:
ActionController::Base.helpers.sanitize(str)
Кредит отправляется lornc answer
Я пишу модель, которая обрабатывает ввод пользователя из текстовой области. Следуя рекомендациям 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
Излишне говорить, что это не работает. При попытке сохранить новую запись появляется следующая ошибка.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
По-видимому, SanitizeHelper создает экземпляр HTML:: WhiteListSanitizer, но когда я смешиваю его с моей моделью, он не может найти HTML:: WhiteListSanitizer. Зачем? Что я могу сделать с этим, чтобы исправить это?
Просто измените первую строку следующим образом:
include ActionView::Helpers
который заставит его работать.
ОБНОВЛЕНИЕ: Для Rails 3 используйте:
ActionController::Base.helpers.sanitize(str)
Кредит отправляется lornc answer
Это дает вам только вспомогательный метод без побочных эффектов загрузки каждого метода ActionView:: Helpers в вашу модель:
ActionController::Base.helpers.sanitize(str)
Чтобы получить доступ к помощникам от ваших собственных контроллеров, просто используйте:
OrdersController.helpers.order_number(@order)
Это работает лучше для меня:
Простой:
ApplicationController.helpers.my_helper_method
Advance:
class HelperProxy < ActionView::Base
include ApplicationController.master_helper_module
def current_user
#let helpers act like we're a guest
nil
end
def self.instance
@instance ||= new
end
end
Источник: http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
Я бы не рекомендовал ни один из этих методов. Вместо этого поставьте его в собственное пространство имен.
class Post < ActiveRecord::Base
def clean_input
self.input = Helpers.sanitize(self.input, :tags => %w(b i u))
end
module Helpers
extend ActionView::Helpers::SanitizeHelper
end
end
Если вы хотите использовать helper_method my_helper_method внутри модели, вы можете написать:
ApplicationController.helpers.my_helper_method