2009-06-18 12 views
1

D'accord. J'ai donc une table appelée contacts. Dans ce tableau, j'ai des personnes et des informations de contact et comment leur méthode préférée de contact (téléphone, adresse, email ou fax). Je veux être en mesure d'avoir une sortie de Ruby une liste de ces personnes d'une manière que je pourrais copier coller dans une barre d'adresse email ou autre.Ruby on Rails - Variable dans une variable

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

Cela fonctionne, mais il ne fait pas ce que je veux faire et je ne m'y attendais pas. Donc, pour une liste de personnes dont le choix préféré est email il sort la liste comme.

Mike < Email>, Joe < Email>, John < Adresse>, Sarah < Téléphone>

au lieu de

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

qu'il appelle le preferred_method, mais ce que je veux réellement faire est ...

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

Donc j'obtiendrais contact.address ou contact.phone en fonction de leur méthode préférée. Mais évidemment, cela ne fonctionne pas. J'ai donc pensé essayer d'assigner <%=h contact.preferred_method %> à une variable.

x = contact.preferred_method 

Et puis ont

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

mais cela ne fonctionne pas non plus.

Toute aide serait appréciée.

Mike

Répondre

2

Vous pouvez utiliser la méthode d'envoi.

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

Invoque la méthode identifiée par un symbole ou une chaîne sur l'objet récepteur.

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

Remarque Je mis un downcase sur le contact.preferred_method parce que je suppose que votre nom de la méthode est « email » non « Email »