Ruby on rails 如何在rake中使用助手?
我可以在rake中使用helper方法吗?可以。您只需要需要需要helper文件,然后将该helper包含在rake文件中(实际上,helper是我们可以包含的mixin) 例如,这里我在app/helpers目录中有一个应用程序\u helper文件,其中包含以下内容: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
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
就更好了。