[ View menu ]

Dynamische Objekt- & Methodenaufrufe in Ruby

Ab und zu kommt man in die Situationen das man Methoden und Objekte nicht direkt aufrufen moechte, sondern den Namen der aufzurufenden Methode dynamisch generieren moechte.  Selten, aber es kommt vor.
Und auch Ruby bietet, wie eigentlich nicht anders zu erwarten, diese Funktionalitaet.

Dynamische Methodenaufrufe gehen recht einfach ueber send:

call_method = 'do_something'
MyObject.send(call_method)

Direkte Objektaufrufe (z.B. auf ein ActiveRecord-Model) lassen sich folgendermassen realisieren:

call_object = 'MyObject'
call_object.classify.constantize.do_something

Wofuer braucht man das ganze?
Z.B. wenn man 2 ActiveRecord-Modelle hat, auf die die gleiche Aktion ausggefuehrt werden soll und man doppelten Code vermeiden moechte.
Beispiel:

['user','post'].each do |name|
  name.classify.constantize.find_by_rowname(params[:id]).destroy
end

 

0 Kommentare

Keine Kommentare

The latest comments to all posts in RSS | TrackBack URI

Write Comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>