Я пишу модель, которая обрабатывает ввод данных пользователем из текстовой области. Следуя совету 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. Зачем? Что я могу сделать, чтобы это исправить?
источник
stack level too deep
. Он находится в методе before_save.Это дает вам только вспомогательный метод без побочных эффектов загрузки каждого метода ActionView :: Helpers в вашу модель:
источник
Для меня это работает лучше:
Просто:
Заранее:
Источник: http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
источник
ApplicationController.master_helper_module
больше не существует в Rails 3 и 4, похоже.ApplicationController.helpers
Хороший один , хотя.Чтобы получить доступ к помощникам из ваших собственных контроллеров, просто используйте:
источник
ApplicationController.helpers.order_number(@order)
. Это означает, что онorder_number
был расположенOrder Helper
Если вы хотите использовать
my_helper_method
внутри модели, вы можете написать:источник
Я бы не рекомендовал ни один из этих методов. Вместо этого поместите его в собственное пространство имен.
источник