¿Cómo uso ayudantes en rastrillo?

¿Puedo usar métodos de ayuda en el rastrillo?

Sí tu puedes. Simplemente necesita solicitar el archivo de ayuda y luego incluir esa ayuda dentro de su archivo de rake (que en realidad es una mezcla que podemos incluir).

Por ejemplo, aquí tengo un archivo application_helper dentro del directorio app / helpers que contiene esto:

module ApplicationHelper def hi "hi" end end 

Así que aquí está el contenido de mi archivo de rastrillo:

 require "#{Rails.root}/app/helpers/application_helper" include ApplicationHelper namespace :help do task :hi do puts hi end end 

Y aquí está el resultado en mi Terminal:

 god:helper-in-rake arie$ rake help:hi hi 

Como mencionó lfender6445, el uso de include ApplicationHelper , como en la respuesta de Arie, contaminará el scope de nivel superior que contiene sus tareas.

Aquí hay una solución alternativa que evita ese efecto secundario inseguro.

Primero, no debemos poner a nuestros ayudantes de tareas en la app/helpers . Para citar de “¿Dónde pongo mi código?” en codefol.io:

Los “ayudantes” de Rails son muy específicamente los ayudantes de vista. Se incluyen automáticamente en las vistas, pero no en los controladores o modelos. Eso es a propósito.

Como app/helpers está diseñado para ayudantes de visualización, y las tareas de Rake no son vistas, deberíamos ubicar a nuestros ayudantes de tarea en otro lugar. Recomiendo lib/task_helpers .

En lib/task_helpers/application_helper.rb :

 module ApplicationHelper def self.hi "hi" end end 

En su Rakefile o un archivo .rake en lib/tasks :

 require 'task_helpers/application_helper' namespace :help do task :hi do puts ApplicationHelper.hi end end 

No estoy seguro de si la pregunta originalmente era sobre la inclusión de ayudantes de visualización en tareas de rake, o simplemente “métodos de ayuda” para tareas de Rake. Pero no es ideal compartir un archivo de ayuda entre las vistas y las tareas. En su lugar, tome los ayudantes que desea usar tanto en vistas como en tareas, y muévalos a una dependencia separada que se incluye tanto en un ayudante de visualización como en un ayudante de tareas.