rakeでヘルパーメソッドを使用できますか?
2 に答える
はい、できます。ヘルパーファイルを要求してから、そのヘルパーをrakeファイルに含める必要があります(実際には、ヘルパーは、含めることができるミックスインです)。
たとえば、app/helpersディレクトリ内にこれを含むapplication_helperファイルがあります。
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
lfender6445 が述べたようにinclude ApplicationHelper
、Arie の回答のように を使用すると、タスクを含む最上位のスコープが汚染されます。
その危険な副作用を回避する代替ソリューションを次に示します。
まず、タスク ヘルパーを に配置しないapp/helpers
でください。「私のコードはどこに置くの?」からの引用 codefol.io で:
Rails の「ヘルパー」は、非常に具体的なビュー ヘルパーです。ビューには自動的に含まれますが、コントローラーやモデルには含まれません。それはわざとです。
はビュー ヘルパーを対象として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 タスクの単なる「ヘルパー メソッド」について尋ねていたのかはわかりません。ただし、ビューとタスクの両方でヘルパー ファイルを共有するのは理想的ではありません。代わりに、ビューとタスクの両方で使用するヘルパーを取得し、それらをビュー ヘルパーとタスク ヘルパーの両方に含まれる別の依存関係に移動します。