我可以在 rake 中使用辅助方法吗?
2 回答
是的你可以。您只需要 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
正如 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 任务的“助手方法”。但是在视图和任务之间共享帮助文件并不理想。取而代之的是,获取您想要在视图和任务中使用的帮助器,并将它们移动到一个单独的依赖项,该依赖项既包含在视图帮助器中,也包含在任务帮助器中。