使用其属性名称显示集合值

时间:2012-02-28 19:43:25

标签: ruby-on-rails activerecord

我想通过传递各自的属性名来显示集合的值。

@mandates是活动记录查询的结果。

@tabattributes包含用户先前选择的属性名称数组。

下面的代码显示字段属性,但我想要这些字段的值。

我尝试了几种语法,但每次都会出错。

如何修改我的代码呢?

  

@mandates.map do | f |

     

@ tabattributes.each {| att | “#{att}”}

     

2 个答案:

答案 0 :(得分:0)

如果我理解你的话,你有一个elements的数组,并且你希望有一个包含每个元素的name的数组,是吗?如果是,那么array.map {|elem| elem.name}应该这样做。有一个较短的形式(array.map(&:name))也是如此,如果你对它的工作原理感兴趣,我可以详细说明。

答案 1 :(得分:0)

如果@mandates是包含属性a的模型的结果集,bc@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)