2012-01-09 2 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]] 

그래서, 당신의 readings.each 블록에서 row 당신이 생각하는 그 model보다는 [model] 사실이며, 그 row[:precise_number1]을 의미합니다 :

[a, b, c].zip 

이 얻을 배열을 사용하여 배열row에 액세스하려고합니다. 따라서 "심볼을 정수로 변환 할 수 없습니다"오류가 발생합니다.

그래서 어느 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을 유지하고 row 정말 어떻게 생겼는지 일치하도록 each 블록을 조정 같은 :

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 : // data-series-for-graph-display-in-ruby-testoverflow.com/questions/8754486/how-to-format-scientific-data-into-proper-data-series-for-graph-display-in-ruby) – ylluminate

관련 문제