update rails query left includes association active ruby-on-rails ruby activerecord model

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



rails sql query (6)

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 < ActiveRecord::Base { before_validation :clean_input ... protected def clean_input self.input = sanitize(self.input, :tags => %w(b i u)) end end

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

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

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?



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)


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(b i u)) end module Helpers extend ActionView::Helpers::SanitizeHelper end end


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

OrdersController.helpers.order_number(@order)


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

ApplicationController.helpers.my_helper_method


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