52

我可以在 rake 中使用辅助方法吗?

4

2 回答 2

72

是的你可以。您只需要 require 帮助文件,然后将该帮助文件包含在您的 rake 文件中(实际上,帮助文件是我们可以包含的 mixin)。

例如,这里我在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 ApplicationHelperArie 的回答中的 ,会污染包含您的任务的顶级范围。

这是避免这种不安全副作用的替代解决方案。

首先,我们不应该我们的任务助手放在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 回答