Ruby on rails 带splat参数的Rake任务
我正在尝试创建一个rake任务,该任务首先接受一个必需的参数,然后接受任意数量的附加参数,我希望将这些参数合并到一个数组中:Ruby on rails 带splat参数的Rake任务,ruby-on-rails,ruby,rake,ruby-on-rails-4,rake-task,Ruby On Rails,Ruby,Rake,Ruby On Rails 4,Rake Task,我正在尝试创建一个rake任务,该任务首先接受一个必需的参数,然后接受任意数量的附加参数,我希望将这些参数合并到一个数组中: rake course["COURSE NAME", 123, 456, 789] 我尝试了以下方法,但是args[:numbers]只是一个字符串w/123,而不是所有的数字 task :course, [:name, *:numbers] => :environment do |t, args| puts args # {:name=>"COURSE
rake course["COURSE NAME", 123, 456, 789]
我尝试了以下方法,但是args[:numbers]
只是一个字符串w/123
,而不是所有的数字
task :course, [:name, *:numbers] => :environment do |t, args|
puts args # {:name=>"COURSE NAME", :numbers=>"123"}
end
从rake 10.1.0开始,您可以使用: 输出:
$ rake "course[COURSE NAME, 123, 456, 789]"
name = COURSE NAME
numbers = 123,456,789
对于rake<10.1.0,您可以创建一个足够大的参数列表
以下是最多26个数字的解决方案:
task :course, [:name, *:a..:z] => :environment do |t, args|
name = args[:name]
numbers = args.values_at(*:a..:z).compact
puts "name = #{name}"
puts "numbers = #{numbers.join ','}"
end
如何
rake课程[“课程名称”,[123456789]]
?这给了我{:NAME=>“课程名称”,:numbers=>“[123”}
,这真的很奇怪。任务的参数之间不允许有空格,试试这个:rake课程[“课程名称”,123456789]
没有。给我{:NAME=>“课程名称”,:numbers=>“123”}
这不起作用。我尝试了rake课程[“课程名称”,123456789]
以及rake课程[“课程名称”,123456789]]
在这两种情况下,args.extras
是nil
似乎是在rake 10.1.0中引入的,也许你必须更新它在使用10.1.0时工作。我们的服务器当前运行的是10.0.3。有没有不使用extras
方法的解决方案?@KyleDecot在我的回答中添加了一个针对rake<10.1.0的黑客攻击
task :course, [:name, *:a..:z] => :environment do |t, args|
name = args[:name]
numbers = args.values_at(*:a..:z).compact
puts "name = #{name}"
puts "numbers = #{numbers.join ','}"
end