Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rake中使用助手?_Ruby On Rails_Ruby_Rake_Helper - Fatal编程技术网

Ruby on rails 如何在rake中使用助手?

Ruby on rails 如何在rake中使用助手?,ruby-on-rails,ruby,rake,helper,Ruby On Rails,Ruby,Rake,Helper,我可以在rake中使用helper方法吗?可以。您只需要需要需要helper文件,然后将该helper包含在rake文件中(实际上,helper是我们可以包含的mixin) 例如,这里我在app/helpers目录中有一个应用程序\u helper文件,其中包含以下内容: module ApplicationHelper def hi "hi" end end 下面是我的rake文件的内容: require "#{Rails.root}/app/helpers/applicat

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

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

例如,这里我在app/helpers目录中有一个应用程序\u 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所提到的,使用
包含ApplicationHelper
(如Arie的回答中所述)将污染包含任务的顶级范围

这里有一个替代解决方案,可以避免这种不安全的副作用

首先,我们应该不要将任务助手放入
app/helpers
。从codefol.io引用:

Rails“helpers”是非常明确的视图帮助程序。它们自动包含在视图中,但不包含在控制器或模型中。那是故意的

由于
app/helpers
用于查看帮助程序,而Rake任务不是视图,因此我们应该将任务帮助程序放在其他地方。我推荐
lib/task\u助手

lib/task\u helpers/application\u helper.rb
中:

module ApplicationHelper
  def self.hi
    "hi"
  end
end
Rakefile
lib/tasks
中的
.rake
文件中:

require 'task_helpers/application_helper'

namespace :help do
  task :hi do
    puts ApplicationHelper.hi
  end
end

我不确定最初的问题是关于在rake任务中包含视图帮助器,还是仅仅针对rake任务的“帮助器方法”。但是,在视图和任务之间共享辅助文件并不理想。取而代之的是,将要在视图和任务中使用的辅助对象移动到一个单独的依赖项中,该依赖项包含在视图辅助对象和任务辅助对象中

注意,通过在rake中使用
include
,您无意中污染了
对象的范围,这会使所有后续导入的rake任务屈从于共享相同的方法。您所说的后续导入的rake任务是什么意思?就像其他.rake文件中的rake任务一样,它也可以访问ApplicationHelper方法?已经说过很多次了,但还不够。。。你真的不应该这样做,尤其是在Rails应用程序(广泛使用Rake)中。它会干扰全局
对象
,这可能会产生影响深远的影响,很难追踪到。刚刚浪费了两个小时…这为我解决了问题--如果你想将参数传递给helper方法,你将无法这样做,除非你按照你所做的那样对作用域进行排序。我想知道把它称为
application\u helper.rb是否是个好主意,因为它可能会引起混乱。也许只要
lib/task\u helpers.rb
就更好了。