我可以在rake中使用辅助方法吗?
答案 0 :(得分:65)
是的,你可以。您只需要需要帮助文件,然后在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
答案 1 :(得分:13)
正如lfender6445所提到的那样,使用include ApplicationHelper
,就像在Arie的回答中一样,将污染包含你的任务的顶级范围。
这是一种避免不安全副作用的替代解决方案。
首先,我们应该不将我们的任务助手放在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任务中包含视图助手,或者仅仅是Rake任务的“辅助方法”。但是在两个视图和任务之间共享帮助文件并不理想。相反,请在两个视图和任务中使用要使用的帮助程序,并将它们移动到一个单独的依赖项中,该依赖项包含在视图帮助程序和任务帮助程序中。