ruby-on-rails - ejemplos - ruby on rails que es
Rieles: cómo usar un ayudante dentro de un controlador (5)
En Rails 5 usa la función helpers.helper_function
en tu controlador.
Ejemplo:
def update
# ...
redirect_to root_url, notice: "Updated #{helpers.pluralize(count, ''record'')}"
end
Fuente: a partir 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: github.com/rails/rails/pull/24866
mientras me doy cuenta de que se supone que debes usar un ayudante dentro de una vista, necesito un ayudante en mi controlador mientras construyo un objeto JSON para regresar.
Se parece un poco a esto:
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 ayudante html_format
?
En general, si el asistente se va a usar en controladores (justos), prefiero declararlo como un método de instancia de la class ApplicationController
.
Mi problema se resolvió con la Opción 1. Probablemente la forma más simple es incluir su módulo auxiliar en su controlador:
class ApplicationController < ActionController::Base
include ApplicationHelper
...
Puedes usar
- @modelo. (Carriles 2)
- view_context. (Carriles 3) (ADVERTENCIA: esto crea una nueva instancia de vista por llamada)
- ActionController :: Base.helpers
- incluir helper en una clase singleton y luego singleton.helper
- incluir el ayudante en el controlador (ADVERTENCIA: hará que todos los métodos auxiliares se conviertan en acciones del controlador)
Nota: Esto fue escrito y aceptado nuevamente en los Rails 2 días; hoy en día la respuesta de grosser (abajo) es el camino a seguir.
Opción 1: Probablemente la forma más simple es incluir su módulo auxiliar en su controlador:
class MyController < ApplicationController
include MyHelper
def xxxx
@comments = []
Comment.find_each do |comment|
@comments << {:id => comment.id, :html => html_format(comment.content)}
end
end
end
Opción 2: O puede declarar el método auxiliar como una función de clase, y usarlo así:
MyHelper.html_format(comment.content)
Si desea poder usarlo como una función de instancia y una función de clase, puede declarar ambas versiones en su ayudante:
module MyHelper
def self.html_format(str)
process(str)
end
def html_format(str)
MyHelper.html_format(str)
end
end
¡Espero que esto ayude!