2016-08-19 134 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。 –