Estou escrevendo um modelo que lida com a entrada do usuário de uma área de texto. Seguindo o conselho de http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input , estou limpando a entrada no modelo antes de salvar no banco de dados, usando o before_validate ligue de volta.
As partes relevantes do meu modelo são assim:
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
Desnecessário dizer que isso não funciona. Recebo o seguinte erro quando tento salvar uma nova postagem.
undefined method `white_list_sanitizer' for #<Class:0xdeadbeef>
Aparentemente, SanitizeHelper cria uma instância de HTML :: WhiteListSanitizer, mas quando eu misturo em meu modelo, ele não consegue encontrar HTML :: WhiteListSanitizer. Por quê? O que posso fazer para corrigir isso?
fonte
stack level too deep
. É um método before_save.Isso fornece apenas o método auxiliar sem os efeitos colaterais de carregar cada método ActionView :: Helpers em seu modelo:
fonte
Isso funciona melhor para mim:
Simples:
Avançar:
Fonte: http://makandracards.com/makandra/1307-how-to-use-helper-methods-inside-a-model
fonte
ApplicationController.master_helper_module
não existe mais no Rails 3 e 4 ao que parece. OApplicationController.helpers
é um bom, porém.Para acessar auxiliares de seus próprios controladores, basta usar:
fonte
ApplicationController.helpers.order_number(@order)
. Isso significa queorder_number
foi localizado emOrder Helper
Eu não recomendaria nenhum desses métodos. Em vez disso, coloque-o em seu próprio namespace.
fonte
Se você quiser usar o
my_helper_method
interior de um modelo, pode escrever:fonte