Подтвердить что ты не робот

Как использовать хэндлеры в грабли?

Могу ли я использовать вспомогательные методы в rake?

4b9b3361

Ответ 1

Да, вы можете. Вам просто нужно потребовать вспомогательный файл, а затем включить этот помощник в свой файл рейка (который на самом деле помощник - это mixin, который мы можем включить).

Например, здесь у меня есть файл application_helper внутри каталога app/helpers, который содержит это:

module ApplicationHelper
  def hi
    "hi"
  end
end

так вот мое содержимое файла rake:

require "#{Rails.root}/app/helpers/application_helper"
include ApplicationHelper

namespace :help do
  task :hi do
    puts hi
  end
end

и вот результат моего терминала:

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

Ответ 2

Как упоминалось в lfender6445, использование include ApplicationHelper, как и в ответе Arie, будет загрязнять область верхнего уровня, содержащую ваши задачи.

Здесь альтернативное решение, позволяющее избежать этого небезопасного побочного эффекта.

Во-первых, мы должны не помещать наши помощники задачи в app/helpers. Процитировать "Где я могу поместить мой код?" в codefol.io:

Rails "помощники" очень конкретно видят помощников. Theyre автоматически включается в представления, но не в контроллеры или модели. Это специально.

Так как app/helpers предназначен для помощников вида, а задачи Rake - это не виды, мы должны поместить наши помощники задач в другое место. Я рекомендую lib/task_helpers.

В lib/task_helpers/application_helper.rb:

module ApplicationHelper
  def self.hi
    "hi"
  end
end

В вашем файле Rakefile или .rake в lib/tasks:

require 'task_helpers/application_helper'

namespace :help do
  task :hi do
    puts ApplicationHelper.hi
  end
end

Я не уверен, был ли вначале задан вопрос о включении справки помощников в rake-задачах или просто "вспомогательных методах" для задач Rake. Но он не идеален, чтобы делиться вспомогательным файлом по обоим представлениям и задачам. Вместо этого возьмите помощников, которые хотите использовать в обоих представлениях и задачах, и переместите их в отдельную зависимость, которая включена как в помощник вида, так и в помощник задачи.