我想通过传递各自的属性名来显示集合的值。
@mandates是活动记录查询的结果。
@tabattributes包含用户先前选择的属性名称数组。
下面的代码显示字段属性,但我想要这些字段的值。
我尝试了几种语法,但每次都会出错。
如何修改我的代码呢?
@mandates.map do | f |
@ tabattributes.each {| att | “#{att}”}
端
答案 0 :(得分:0)
如果我理解你的话,你有一个elements
的数组,并且你希望有一个包含每个元素的name
的数组,是吗?如果是,那么array.map {|elem| elem.name}
应该这样做。有一个较短的形式(array.map(&:name)
)也是如此,如果你对它的工作原理感兴趣,我可以详细说明。
答案 1 :(得分:0)
如果@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)