web-dev-qa-db-fra.com

Comment passer plusieurs arguments à une méthode Ruby en tant que tableau?

J'ai une méthode dans un fichier d'assistance Rails comme celui-ci

def table_for(collection, *args)
 options = args.extract_options!
 ...
end

et je veux pouvoir appeler cette méthode comme ça

args = [:name, :description, :start_date, :end_date]
table_for(@things, args)

afin que je puisse passer dynamiquement les arguments basés sur une validation de formulaire. Je ne peux pas réécrire la méthode, car je l'utilise à trop d'endroits, comment faire autrement?

63
Chris Drappier

Ruby gère bien plusieurs arguments.

Voici un assez bon exemple.

def table_for(collection, *args)
  p collection: collection, args: args
end

table_for("one")
#=> {:collection=>"one", :args=>[]}

table_for("one", "two")
#=> {:collection=>"one", :args=>["two"]}

table_for "one", "two", "three"
#=> {:collection=>"one", :args=>["two", "three"]}

table_for("one", "two", "three")
#=> {:collection=>"one", :args=>["two", "three"]}

table_for("one", ["two", "three"])
#=> {:collection=>"one", :args=>[["two", "three"]]}

(Sortie coupée et collée depuis irb)

89
sean lynch

Appelez-le simplement ainsi:

table_for(@things, *args)

L'opérateur splat (*) Fera le travail, sans avoir à modifier la méthode.

56