2009-06-18 133 views
1

好的。所以我有一个叫联系人的表。在这个表格中,我有人和那里的联系信息,以及他们的首选联系方式(电话,地址,电子邮件或传真)。我希望能够以可以将粘贴复制到电子邮件地址栏或类似内容的方式让ruby输出所述人员的列表。Ruby on Rails - 可变内部变量

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

这是有效的,但它没有做我想做的事,我没有想到它会发生。因此,对于首选电子邮件的人员列表,将其输出为。

迈克<电子邮件>,乔<电子邮件>,约翰<地址>,莎拉<电话>的

代替

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

它调用了preferred_method,但我真正想要做的是...

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

所以我会得到contact.address或contact.phone取决于他们的preferred_method。但显然这是行不通的。所以我想到试图将 <%=h contact.preferred_method %>分配给一个变量。

x = contact.preferred_method 

再有

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

但这并不工作。

任何帮助,将不胜感激。

Mike

回答

2

您可以使用send方法。

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

调用由接收对象上的符号或字符串标识的方法。

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

注意我设置了一个contact.preferred_method因为downcase我假设你的方法名称为“邮件”而不是“电子邮件”