52

rakeでヘルパーメソッドを使用できますか?

4

2 に答える 2

72

はい、できます。ヘルパーファイルを要求してから、そのヘルパーを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
于 2009-09-25T07:23:35.293 に答える
20

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 タスクの単なる「ヘルパー メソッド」について尋ねていたのかはわかりません。ただし、ビューとタスクの両方でヘルパー ファイルを共有するのは理想的ではありません。代わりに、ビューとタスクの両方で使用するヘルパーを取得し、それらをビュー ヘルパーとタスク ヘルパーの両方に含まれる別の依存関係に移動します。

于 2016-01-06T13:50:33.180 に答える