ruby - rails - Cómo pasar múltiples parámetros para realizar tareas
haml to html (5)
Quiero pasar varios parámetros pero no sé los números. Tales como nombres de modelos. ¿Cómo transfiero esos parámetros a una tarea de rake y cómo accedo a esos parámetros dentro de la tarea de rake?
Me gusta, $ rake test_rake_task[par1, par2, par3]
Puede usar args.extras
para iterar sobre todos los argumentos sin indicar explícitamente cuántos parámetros tiene.
Ejemplo:
desc "Bring it on, parameters!"
task :infinite_parameters do |task, args|
puts args.extras.count
args.extras.each do |params|
puts params
end
end
Correr:
rake infinite_parameters[''The'',''World'',''Is'',''Just'',''Awesome'',''Boomdeyada'']
Salida:
6
The
World
Is
Just
Awesome
Boomdeyada
Puedes probar algo así:
rake test_rake_task SOME_PARAM=value1,value2,value3
Y en la tarea de rake:
values = ENV[''SOME_PARAM''].split('','')
Rake admite el paso de parámetros directamente a una tarea utilizando una matriz, sin usar el hack ENV.
Define tu tarea de esta manera:
task :my_task, [:first_param, :second_param] do |t, args|
puts args[:first_param]
puts args[:second_param]
end
Y llámalo así:
rake my_task[Hello,World]
=> Hello
World
Este artículo de Patrick Reagan en el blog de Viget lo explica muy bien.
Utilice args.values.
task :events, 1000.times.map { |i| "arg#{i}".to_sym } => :environment do |t, args|
Foo.use(args.values)
end
Encontré este ejemplo en esta publicación de blog y la sintaxis parece un poco más limpia.
Por ejemplo, si tuviera una tarea de say_hello
, podría llamarla con cualquier número de argumentos, como por ejemplo:
$ rake say_hello Earth Mars Venus
Así es como funciona:
task :say_hello do
# ARGV contains the name of the rake task and all of the arguments.
# Remove/shift the first element, i.e. the task name.
ARGV.shift
# Use the arguments
puts ''Hello arguments:'', ARGV
# By default, rake considers each ''argument'' to be the name of an actual task.
# It will try to invoke each one as a task. By dynamically defining a dummy
# task for every argument, we can prevent an exception from being thrown
# when rake inevitably doesn''t find a defined task with that name.
ARGV.each do |arg|
task arg.to_sym do ; end
end
end