2009-06-18 17 views
1

In Ordnung. Also habe ich eine Tabelle namens Kontakte. In dieser Tabelle habe ich Personen und dort Kontaktinformationen und wie ihre bevorzugte Methode des Kontakts (Telefon, Adresse, E-Mail oder Fax). Ich möchte in der Lage sein, Ruby eine Liste der genannten Personen auf eine Weise ausgeben zu lassen, die ich in eine E-Mail-Adressleiste kopieren könnte.Ruby on Rails - Variable innerhalb einer Variablen

Das funktioniert, aber es tut nicht, was ich will, und ich habe es nicht erwartet. Für eine Liste von Leuten, die die bevorzugte Wahl haben, ist die Email als Liste auszugeben.

Mike < E-Mail>, Joe < E-Mail>, John < Adresse>, Sarah < Telefon>

statt

Mike <[email protected]>, Joe <[email protected]>, John <2014 Street>, Sarah <111-111-1111> 

Es ist die preferred_method nennen, aber was ich will es eigentlich zu tun ist, ...

<% @contacts.each do |contact| %> 
     <%=h contact.contact_name %> < <%=h contact.<%=h contact.preferred_method %> >, 
<% end %> 

So würde ich contact.address oder contact.phone je nach preferred_method erhalten. Aber offensichtlich funktioniert das nicht. Also dachte ich daran, <%=h contact.preferred_method %> einer Variablen zuzuordnen.

x = contact.preferred_method 

Und dann haben

<% @contacts.each do |contact| %> 
     <%=h contact.contact_name %> < <%=h contact.x %> >, 
<% end %> 

aber das funktioniert auch nicht.

Jede Hilfe wäre willkommen.

Mike

Antwort

2

Sie können die send-Methode verwenden.

<%=h contact.send(contact.preferred_method.downcase) %> 

Ruft die Methode auf, die durch ein Symbol oder eine Zeichenfolge am empfangenden Objekt identifiziert wird.

contact.send(:email) 
contact.send('address') 

Hinweis richte ich ein downcase auf dem contact.preferred_method, weil ich Ihre Methode Name ist ‚E-Mail‘ nicht ‚Email‘ annehmen