2010-10-29 3 views
2

У меня есть следующие столбцы в моей таблице:Как пропустить значения ActiveRecord в Rails?

value1 значение2 value3 value4 value5

Я хочу, чтобы иметь возможность перебрать их так:

<% for i in 1..5 %> 
    <div><%= user."value#{i}"</div> 
<% end %> 

Конечно, это код не работает, так как я могу получить значение из объекта ActiveRecord со строкой?

ответ

2

Попробуйте использовать send (см. Ruby documentation).

+0

Спасибо, именно то, что мне нужно! Рубин потрясающий. – Alex

+0

Нет проблем. Да, Руби удивительный! :) –

4

Вы можете использовать метод send для отправки имени метода любому объекту в виде строки. Ниже приведен пример, который вы ищете.

<% for i in 1..5 %> 
    <div><%= user.send("value#{i}") %></div> 
<% end %> 
7

Ничего себе, если вы действительно не имеете плохое именование для ваших атрибутов, метод send только собирается получить вас на полпути. Являются ли ваши имена атрибутов действительно пронумерованными последовательно?

Вот как перебрать ваши атрибуты, независимо от их названий:

<% user.attributes.each do |name, value| %> 
    <div> 
    <%= name %>: <%= value %> 
    </div> 
<% end %> 

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

+1

Проблема в том, что он будет выполнять все атрибуты. Вполне возможно, что его приложение Rails взаимодействует с какой-то ужасно отформатированной/названной устаревшей базой данных, и есть 5 полей с именем «contact1», «contact2» и т. Д. –

+0

Это, безусловно, будет проходить через все атрибуты, как описано. Если вы хотите немного сорвать, вы можете легко сделать это с помощью метода select. Я просто не хотел, чтобы он чувствовал себя так, как будто он должен называть поля таким образом, чтобы пробивать их. –

+0

Как сказал Майк, в базе данных есть что-то ужасное, что буквально выглядит так: value1, value2, value3, value4, value5. Так что да, они нумеруются последовательно. Хороший момент. – Alex

Смежные вопросы