2009-09-20 71 views

回答

61

是的,可以。你只需要求助手文件,然後在你的rake文件中包含這個助手(實際上這個助手是我們可以包含的一個mixin)。

例如,在這裏我有一個application_helper文件中應用程序/傭工目錄中包含此:

module ApplicationHelper 
    def hi 
    "hi" 
    end 
end 

所以這裏是我的耙文件的內容:

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 
+3

小心,使用'耙內include',在你不經意間污染'Object',這屈從所有後續進口耙任務共享相同的方法的範圍。 – lfender6445 2014-04-16 06:00:26

+1

隨後導入的rake任務是什麼意思?正如rake其他.rake文件中的任務也可以訪問ApplicationHelper方法? – 2014-10-18 17:51:13

+0

據說和說,但它不能說足夠了......你真的不應該這樣做,特別是在Rails應用程序(廣泛使用Rake)中。它與全球的「對象」混雜在一起,這可能產生深遠的影響,而這些影響可能非常難以追查。剛剛失去了兩個小時... – nrser 2017-09-27 15:50:30

10

如前所述lfender6445,使用include ApplicationHelper,在阿里的答案,會污染包含你的任務頂層範圍。

下面是一個替代的解決方案,避免了不安全的副作用。

首先,我們應該不是把我們的任務助手在app/helpers。在codefol.io從"Where Do I Put My Code?"引用:

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任務的「輔助方法」。但是,跨視圖和任務共享助手文件並不理想。相反,把你想在視圖和任務使用助手,並將其移動到既是一個視圖助手,並在任務幫手包括一個單獨依賴。

+1

這解決了我 - 如果你想傳遞參數的輔助方法,你將無法做到這一點,除非你已經完成了排序範圍 – 2016-06-21 16:24:11

+0

我想知道如果將它稱爲application_helper是一個好主意。因爲它可能會導致混淆。也許只是'lib/task_helpers.rb'會更好。 – 2017-12-20 03:43:20

+0

這是一個很好的和安全的方式...謝謝.... – prasanthrubyist 2018-01-17 12:47:17