144 votes

Que fait send() dans Ruby ?

Quelqu'un peut-il me dire ce que

send("#{Model.find...}")

est et est ?

135voto

Nikita Rybak Points 36641

send est une méthode rubis (sans rails) permettant d'invoquer une autre méthode par son nom.

De la documentation

   class Klass
     def hello(*args)
       "Hello " + args.join(' ')
     end
   end
   k = Klass.new
   k.send :hello, "gentle", "readers"   #=> "Hello gentle readers"

http://corelib.rubyonrails.org/classes/Object.html#M001077

18voto

Mike Vallano Points 266

Un autre exemple, similaire à celui d'Antonio Jha https://stackoverflow.com/a/26193804/1897857

est si vous avez besoin de lire des attributs sur un objet.

Par exemple, si vous avez un tableau de chaînes, si vous essayez de les répéter et de les appeler sur votre objet, cela ne fonctionnera pas.

atts = ['name', 'description']
@project = Project.first
atts.each do |a|
  puts @project.a
end
# => NoMethodError: undefined method `a'

Cependant, vous pouvez send les chaînes de l'objet :

atts = ['name', 'description']
@project = Project.first
atts.each do |a|
  puts @project.send(a)
end
# => Vandalay Project
# => A very important project

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X