Si bien me doy cuenta de que se supone que debes usar un ayudante dentro de una vista, necesito un ayudante en mi controlador ya que estoy construyendo un objeto JSON para regresar.
Va un poco así:
def xxxxx
   @comments = Array.new
   @c_comments.each do |comment|
   @comments << {
     :id => comment.id,
     :content => html_format(comment.content)
   }
   end
   render :json => @comments
end¿Cómo puedo acceder a mi html_formatayudante?
                    
                        ruby-on-rails
                                ruby-on-rails-3
                                ruby-on-rails-5
                                
                    
                    
                        Un aprendiz
fuente
                
                fuente

Respuestas:
Nota: Esto fue escrito y aceptado en los Rails 2 días; hoy en día la respuesta de Grosser es el camino a seguir.
Opción 1: Probablemente la forma más simple es incluir su módulo auxiliar en su controlador:
Opción 2: O puede declarar el método auxiliar como una función de clase, y usarlo así:
Si desea poder usarlo como una función de instancia y una función de clase, puede declarar ambas versiones en su ayudante:
¡Espero que esto ayude!
fuente
html_format, solo necesitaMyHelper.html_formaten la segunda.link_to. Los controladores no tienen acceso a estos métodos y la mayoría de mis ayudantes los utilizan. Además, incluir el ayudante en el controlador expone todos los métodos del ayudante como acciones de acceso público, lo que no es bueno.view_contextes el camino a seguir en Rails 3.Puedes usar
helpers.<helper>en rieles 5+ (oActionController::Base.helpers.<helper>)view_context.<helper>( Rieles 4 y 3 ) (ADVERTENCIA: esto crea una nueva instancia de vista por llamada)@template.<helper>( Rieles 2 )singleton.helperincludeel ayudante en el controlador (ADVERTENCIA: convertirá todos los métodos de ayuda en acciones del controlador)fuente
view_context.helper_functiones simple y funciona muy bien.ActionController::Base.helpers.helper_functionEs igual de bueno.view_context= genioview_context. Instanciará una nueva instancia de vista por llamada ...ActionController::Base.helpers.helper_functionno parece funcionar Me apareceNoMethodError - undefined method spell_date_and_time' for #<ActionView::Base:0x007fede56102d0>:cuando intento llamarActionController::Base.helpers.spell_date_and_time()a un método controlador.view_context.spell_date_and_time()Sin embargo, llamar funciona.helpers.helper_functionen su controlador ( github.com/rails/rails/pull/24866 )En Rails 5 use el
helpers.helper_functionen su controlador.Ejemplo:
Fuente: De un comentario de @Markus sobre una respuesta diferente. Sentí que su respuesta merecía su propia respuesta, ya que es la solución más limpia y fácil.
Referencia: https://github.com/rails/rails/pull/24866
fuente
helperen singular y en el controlador es plural.Mi problema se resolvió con la Opción 1. Probablemente la forma más simple es incluir su módulo auxiliar en su controlador:
fuente
En general, si el ayudante se va a usar en (solo) controladores, prefiero declararlo como un método de instancia de
class ApplicationController.fuente
En Rails 5+ puedes simplemente usar la función como se muestra a continuación con un ejemplo simple:
fuente
En Rails 5+ simplemente use helpers ( helpers.number_to_currency (10000) )
fuente