Могу ли я использовать вспомогательные методы в rake?
Как использовать хэндлеры в грабли?
Ответ 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. Но он не идеален, чтобы делиться вспомогательным файлом по обоим представлениям и задачам. Вместо этого возьмите помощников, которые хотите использовать в обоих представлениях и задачах, и переместите их в отдельную зависимость, которая включена как в помощник вида, так и в помощник задачи.