我如何在佣金中使用佣工?

Sam*_*ong 46 ruby rake ruby-on-rails helper

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

Ari*_*rie 69

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

例如,这里我在app/helpers目录下有一个application_helper文件,其中包含:

module ApplicationHelper
  def hi
    "hi"
  end
end
Run Code Online (Sandbox Code Playgroud)

所以这是我的rake文件的内容:

require "#{Rails.root}/app/helpers/application_helper"
include ApplicationHelper

namespace :help do
  task :hi do
    puts hi
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我终端上的结果:

god:helper-in-rake arie$ rake help:hi 
hi
Run Code Online (Sandbox Code Playgroud)

  • 要注意,通过在rake中使用`include`,你无意中污染了`Object`的范围,它会使所有后来导入的rake任务屈服于共享相同的方法. (3认同)

Max*_*ace 15

正如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
Run Code Online (Sandbox Code Playgroud)

在您Rakefile或您的.rake文件中lib/tasks:

require 'task_helpers/application_helper'

namespace :help do
  task :hi do
    puts ApplicationHelper.hi
  end
end
Run Code Online (Sandbox Code Playgroud)

我不确定这个问题最初是否是在rake任务中包含视图助手,或者只是Rake任务的"帮助方法".但是在两个视图和任务之间共享帮助文件并不理想.相反,在两个视图和任务中使用要使用的帮助程序,并将它们移动到一个单独的依赖项中,该依赖项包含在视图助手和任务助手中.

  • 我想知道将其命名为application_helper.rb是个好主意,因为它可能会引起混乱。也许只是lib / task_helpers.rb会更好。 (2认同)