Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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/6/ant/2.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 带splat参数的Rake任务_Ruby On Rails_Ruby_Rake_Ruby On Rails 4_Rake Task - Fatal编程技术网

Ruby on rails 带splat参数的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任务,该任务首先接受一个必需的参数,然后接受任意数量的附加参数,我希望将这些参数合并到一个数组中:

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