Отобразить значение коллекции, используя имя их атрибутов - PullRequest
0 голосов
/ 28 февраля 2012

Я хочу отобразить значение коллекции, передав соответствующее имя атрибута.

@ mandates является результатом запроса активной записи.

@ tabattributes содержит массив имен атрибутов, ранее выбранных пользователями.

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

Я пробовал несколько синтаксисов, но ошибки возникают каждый раз.

Как я могу изменить свой код, чтобы сделать это?

@mandates.map do | f |

@tabattributes.each {| att | "# {att}"}

конец

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Если @mandates - это результирующий набор, содержащий модели с атрибутами a, b и c, а @tabattributes - это массив %w{a b} (т.е. вы хотите извлечь a и b из каждого элемента @mandates) тогда:

a = @mandates.map { |m| m.attributes.slice(*@tabattributes) }

даст вам массив хэшей с ключами 'a' и 'b'.Например:

@tabattributes = %w{id created_at}
slices = @mandates.map { |m| m.attributes.slice(*@tabattributes) }
# slices is now like [ { 'id' => ..., 'created_at' => ... }, ... ]

Если вы хотите только значения и не заботитесь о ключах, возможно, это подойдет вам:

@mandates.map { |m| m.attributes.slice(*@tabattributes).values }

Это даст вам массив-из-массивов.С первым массивом хэшей, вероятно, будет проще работать.

Если вы можете получить @mandates до доступа к базе данных, то вы можете вырезать только те столбцы, которые вам интересны, внутри базы данных с помощьюкак то так:

@mandates = Mandate.select(@tabattributes)
slices    = @mandates.map(&:attributes)
0 голосов
/ 28 февраля 2012

Если я вас правильно понял, у вас есть массив elements, и вы хотите иметь массив, содержащий name каждого элемента, не так ли? Если да, то array.map {|elem| elem.name} должен это сделать. Существует более короткая форма (array.map(&:name)), которая делает то же самое, если вам интересно, как это работает, я могу подробно рассказать.

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