2016-08-19 135 views
0

我有一个数组arr = ["model", "engine", "year", ................],其中每个元素是Car模型的属性名称。
我想这些特定的属性值推到另一个阵列访问对象属性轨道4

Car.all.each do |mycar| 
    another_array << arr.map{ |attr| mycar.attr } 
end 

当然,这给预期no method error .attr for <object>。什么是这样做的正确方法? 编辑 我知道.send()方法,但我发现,使用ATTR加密宝石某些字段加密,当我使用。发送不正确解密()。所以我要尝试其他的东西像这样

回答

2

你需要没有什么的Rails/ActiveRecord的具体。

如果你确定的属性是“安全的”(即,用户不可能插手与列表,或者你之前验证方法名),你可以简单地使用Ruby的send

mycar.send(attr) # dangerous 
mycar.public_send(attr) # a bit less dangerous. Keep reading for the correct solution.. 

的ActiveRecord做为此提供一个快捷方式,但(这并检查你):

mycar[attr] 
+0

是的,我知道,我一直在使用的方法。发送,但由于我使用ATTR加密的宝石,我发现用发送方法时,某些字段不被解密,rthats为什么我要尝试财产以后这样 –

+0

你需要存储用' – Ven

+0

之前encrypted_'那么我不会解密值 –

0

您可以使用attributes

Car.all.each do |mycar| 
    another_array << mycar.attributes.slice("model", "engine", "year").values } 
end 
+0

感谢您的帮助,但因为ATT加密使用“encrypted_”前缀属性之前我不能使用.values。 –