Ruby on Rails - переменная внутри переменной - PullRequest
1 голос
/ 18 июня 2009

Хорошо. Итак, у меня есть таблица под названием контакты. В этой таблице у меня есть люди и там контактная информация и как их предпочитаемый метод контакта (телефон, адрес, электронная почта или факс). Я хочу, чтобы ruby ​​выводил список указанных людей таким образом, чтобы я мог скопировать вставку в адресную строку электронной почты или что-то подобное.

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

Это работает, но не делает то, что я хочу, и я не ожидал этого. Таким образом, для списка людей, чей предпочтительный выбор - электронная почта, он выводит список как.

Майк <Электронная почта>, Джо <Электронная почта>, Джон <Адрес>, Сара <Телефон>

вместо

Mike <mike@yahoo.com>, Joe <joe@aol.com>, John <2014 Street>, Sarah <111-111-1111>

Он вызывает предпочитаемый метод, но я на самом деле хочу, чтобы это было ...

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

Так что я бы получил contact.address или contact.phone в зависимости от их предпочитаемого метода. Но очевидно, что это не работает. Поэтому я подумал о попытке назначить <%=h contact.preferred_method %> к переменной.

x = contact.preferred_method

А потом есть

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

но это тоже не работает.

Буду признателен за любую помощь.

Mike

1 Ответ

2 голосов
/ 18 июня 2009

Вы можете использовать метод отправки.

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

Вызывает метод, идентифицируемый символом или строкой на принимающем объекте.

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

Примечание. Я установил нижний регистр для contact.preferred_method, поскольку я предполагаю, что имя вашего метода - «email», а не «Email»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...