我在名为att_rec_for_emp.rake
的文件中创建了一个rake任务。在这个文件中,我有以下任务。
task hello(parameter): :environment do
p "{parameter}"
end
如何通过传递参数在控制器动作中调用此rake任务?
我有这样的行动
def call_task
emp = Employee.first
Rake::Task[ 'att_rec_for_emp:hello("hello world")' ].invoke
redirect_to :root , :notice => "message fine"
end
并且在config/initialisers/rake.rb
我有以下声明。
Rake.load_rakefile Rails.root.join( 'lib','tasks','att_rec_for_emp.rake' )
但仍然没有执行任务。得到错误
Don't know how to build task 'att_rec_for_emp:hello'
答案 0 :(得分:1)
我想我已经开始工作了。从这里调整。
这就是我的所作所为:
<强> LIB /任务/ att_rec_for_emp.rake 强>
task :hello, [:parameter] => :environment do |t, args|
p "#{args[:parameter]}"
end
应用/控制器/ your_controller.rb 强>
Rake::Task.clear
YourAppName::Application.load_tasks
class YourController < ApplicationController
def call_task
Rake::Task[:hello].reenable
Rake::Task[:hello].invoke('hi world')
end
end
您还可以将前两行(在YourController类定义之上)放在初始化程序中。
注意:您在初始化程序中加载Rake文件的方法也应该有效但我的设置稍有不同。我在application.rb
中加载了我的整个lib目录。
<强>配置/ application.rb中强>
config.autoload_paths += Dir["#{config.root}/lib"]
希望有所帮助!
答案 1 :(得分:0)
尝试将此行添加到您的控制器:
YourAppName::Application.load_tasks
或者,将目录名称从initialisers
更改为initializers
。