Uso de ayudantes en el modelo: ¿cómo incluyo las dependencias de ayuda?

Estoy escribiendo un modelo que maneja la entrada del usuario desde un área de texto. Siguiendo el consejo de http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input , estoy limpiando la entrada en el modelo antes de guardar en la base de datos, usando before_validate llamar de vuelta.

Las partes relevantes de mi modelo se ven así:

include ActionView::Helpers::SanitizeHelper class Post  %w(biu)) end end 

No hace falta decir que esto no funciona. Recibo el siguiente error cuando bash guardar una publicación nueva.

 undefined method `white_list_sanitizer' for # 

Aparentemente, SanitizeHelper crea una instancia de HTML :: WhiteListSanitizer, pero cuando lo mezclo en mi modelo no puede encontrar HTML :: WhiteListSanitizer. ¿Por qué? ¿Qué puedo hacer al respecto para solucionarlo?

Simplemente cambie la primera línea de la siguiente manera:

 include ActionView::Helpers 

eso lo hará funcionar

ACTUALIZACIÓN: Para el uso de Rails 3:

 ActionController::Base.helpers.sanitize(str) 

El crédito va a la respuesta de Lornc

Esto le proporciona solo el método de ayuda sin los efectos secundarios de cargar todos los métodos de ActionView :: Helpers en su modelo:

 ActionController::Base.helpers.sanitize(str) 

Esto funciona mejor para mí:

Sencillo:

 ApplicationController.helpers.my_helper_method 

Avanzar:

 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 

Fuente: http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model

Para acceder a los ayudantes desde sus propios controladores, simplemente use:

 OrdersController.helpers.order_number(@order) 

No recomendaría ninguno de estos métodos. En cambio, colóquelo dentro de su propio espacio de nombres.

 class Post < ActiveRecord::Base def clean_input self.input = Helpers.sanitize(self.input, :tags => %w(biu)) end module Helpers extend ActionView::Helpers::SanitizeHelper end end 

Si desea utilizar un my_helper_method dentro de un modelo, puede escribir:

 ApplicationController.helpers.my_helper_method