2017-03-29 4 views
0

Ich habe ein Benutzer-Objekt, das ich so zugreifen .. user.email, user.first_namedynamisch innerhalb Array Methodennamen in Ruby ändern

Jetzt mag ich durch jede Schleife und gibt eine Meldung auf dem aktuellen Schlüssel in Schleife basierend etwas wie diese.

[user.first_name, user.email, user.last_name].each do |key| 
     puts "#{key} is required" 
end 

Die oben genannten Werke, sondern Schleifen durch values statt fields. also wird das unten tun, aber wie man Benutzer Schlüsseln voranstellt und Werte innerhalb des Feldes erhält?

Wenn dies eine Zeichenfolge war, können wir verketten, aber wie behandelt man dies hier als einen Methodenaufruf?

+1

Fragen Sie, wie man 'key' als Methodenaufruf für' user' verwendet? – jvillian

+0

@jvillian ja ... – Abhilash

Antwort

2

Mit Active Sie Eigenschaften über die [] Methode zugreifen können:

[ :first_name, :email, :last_name ].each do |key| 
    unless (user[key]) 
    puts "#{key} is required" 
    end 
end 

Diese in der Regel viel sicherer als die send Ansatz, weil es nicht ruft beliebige Methoden.

+0

Gute, @tadman! Danke und ich werde es mir merken. – jvillian

-1
[first_name, email, last_name].each do |key| 
puts user.send(key) 
end 
+0

@AndreyDeineko das funktioniert obwohl .. – Abhilash

1

Sie können einfach tun:

user.send(key) 
Verwandte Themen