enquanto eu percebo que você deve usar um auxiliar dentro de uma exibição, preciso de um auxiliar no meu controlador enquanto estou construindo um objeto JSON para retornar.
É um pouco assim:
def xxxxx
@comments = Array.new
@c_comments.each do |comment|
@comments << {
:id => comment.id,
:content => html_format(comment.content)
}
end
render :json => @comments
end
como posso acessar meu html_format
ajudante?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-5
Um aprendiz
fonte
fonte
Respostas:
Nota: Isso foi escrito e aceito nos 2 dias do Rails; hoje a resposta mais grosseira é o caminho a percorrer.
Opção 1: Provavelmente a maneira mais simples é incluir o módulo auxiliar no seu controlador:
Opção 2: Ou você pode declarar o método auxiliar como uma função de classe e usá-lo da seguinte forma:
Se você quiser usá-lo como uma função de instância e uma função de classe, poderá declarar as duas versões no seu auxiliar:
Espero que isto ajude!
fonte
html_format
- você só precisaMyHelper.html_format
na segunda.link_to
. Os controladores não têm acesso a esses métodos e a maioria dos meus ajudantes usa esses métodos. Além disso, incluir o auxiliar no controlador expõe todos os métodos do auxiliar como ações acessíveis ao público, o que não é bom.view_context
é o caminho a percorrer no Rails 3.Você pode usar
helpers.<helper>
no Rails 5+ (ouActionController::Base.helpers.<helper>
)view_context.<helper>
( Rails 4 e 3 ) (AVISO: instancia uma nova instância de visualização por chamada)@template.<helper>
( Trilhos 2 )singleton.helper
include
o auxiliar no controlador (AVISO: transformará todos os métodos auxiliares em ações do controlador)fonte
view_context.helper_function
é simples e funciona muito bem.ActionController::Base.helpers.helper_function
é igualmente bom.view_context
= geniusview_context
.ActionController::Base.helpers.helper_function
parece não funcionar. ReceboNoMethodError - undefined method spell_date_and_time' for #<ActionView::Base:0x007fede56102d0>:
ao tentar chamarActionController::Base.helpers.spell_date_and_time()
um método de controlador. chamarview_context.spell_date_and_time()
funciona no entanto.helpers.helper_function
em seu controlador ( github.com/rails/rails/pull/24866 )No Rails 5, use o
helpers.helper_function
no seu controlador.Exemplo:
Fonte: De um comentário de @Markus em uma resposta diferente. Eu senti que a resposta dele merecia sua própria resposta, já que é a solução mais limpa e fácil.
Referência: https://github.com/rails/rails/pull/24866
fonte
helper
no singular e no controlador é plural.Meu problema foi resolvido com a opção 1. Provavelmente, a maneira mais simples é incluir o módulo auxiliar no seu controlador:
fonte
Em geral, se o auxiliar for usado em (apenas) controladores, prefiro declará-lo como um método de instância de
class ApplicationController
.fonte
No Rails 5+, você pode simplesmente usar a função conforme demonstrado abaixo com um exemplo simples:
fonte
No Rails 5+, basta usar helpers ( helpers.number_to_currency (10000) )
fonte