2012-01-09 49 views
0

顯然我在這裏錯過了一些明顯的東西,但會很感激一個簡單的例子。如何通過ActiveRecord行結果中的屬性名稱訪問字段?

我有一條記錄從ActiveRecord回來,我從查詢中選擇了幾列。這些字段是BigDecimal格式,需要將其平鋪爲字符串。

我最初以爲是足夠拉查詢有:

rows = ModelName.order("date DESC").select('table_name.precise_number1, table_name.precise_number2').limit(100).all.zip 
rows_stringified1 = Array.new 
rows_stringified2 = Array.new 

readings.each do |row| 
    rows_stringified1.push row[:precise_number1].to_s 
    rows_stringified2.push row[:precise_number2].to_s 
end 

然而,這會產生這樣的錯誤的can't convert Symbol into Integer。顯然,我沒有完全遵循如何從行集結果中的記錄中訪問列。

您通常會如何做到這一點?

回答

2

想必你有一個錯字,你這樣做是:

readings = ModelName.order("date DESC"). 
        select('table_name.precise_number1, table_name.precise_number2'). 
        limit(100). 
        all. 
        zip 

,而不是分配給rows。注意到zip在最後?這沒有任何意義。當你這樣做:

[a, b, c].zip 

你會得到這樣的:

[[a], [b], [c]] 

因此,在你readings.each塊中,row其實[model]而非model,你認爲這是,這意味着,row[:precise_number1]正試圖訪問陣列row使用符號:precise_number1而不是數組所需的整數,因此您的「無法將符號轉換爲整數」錯誤。

因此,無論擺脫zip的,並留下您each爲-是:

readings = ModelName.order("date DESC"). 
        select('table_name.precise_number1, table_name.precise_number2'). 
        limit(100). 
        all 
# ... 
readings.each do |row| 
    rows_stringified1.push row[:precise_number1].to_s 
    rows_stringified2.push row[:precise_number2].to_s 
end 

或保持zip和調整each塊以匹配row真正的樣子:

readings = ModelName.order("date DESC"). 
        select('table_name.precise_number1, table_name.precise_number2'). 
        limit(100). 
        all. 
        zip 
# ... 
readings.each do |row| 
    rows_stringified1.push row.first[:precise_number1].to_s 
    rows_stringified2.push row.first[:precise_number2].to_s 
end 

我建議擺脫zip,因爲它沒有任何用處,只是混淆了事情。

+0

是的,我從一個我遵循的例子中不經意地離開了zip方法。如果你能看一下以下內容,我會非常好奇和讚賞,因爲這是一箇中間問題,但毫無結果,邁出了這個最終問題的一步:[如何將科學數據格式化爲圖表顯示的正確數據系列](http:// stackoverflow.com/questions/8754486/how-to-format-scientific-data-into-proper-data-series-for-graph-display-in-ruby) – ylluminate 2012-01-09 01:52:31

相關問題