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_format
ayudante?
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_format
en 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_context
es 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.helper
include
el ayudante en el controlador (ADVERTENCIA: convertirá todos los métodos de ayuda en acciones del controlador)fuente
view_context.helper_function
es simple y funciona muy bien.ActionController::Base.helpers.helper_function
Es igual de bueno.view_context
= genioview_context
. Instanciará una nueva instancia de vista por llamada ...ActionController::Base.helpers.helper_function
no 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_function
en su controlador ( github.com/rails/rails/pull/24866 )En Rails 5 use el
helpers.helper_function
en 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
helper
en 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