2015-01-27 3 views
0

웹 애플 리케이션, Postgresql 데이터베이스, squeel gem에서 Rails 4를 사용하고 있습니다.Rails의 열 함수로 평균 쿼리하기

내 모델 statistic.rb

def properties_mean_ppm(mode, rooms, type, output_currency_id) 
    sql_result = properties(mode, rooms, type).select{ 
    avg(price_dolar/property_area).as(prom) 
    } 
    avg = sql_result[0].prom 
    final_avg = change_currency(avg, DOLAR_ID, output_currency_id) 
    return final_avg.to_f 
end 

price_dolar 및 property_area이 기능이는 특성 테이블에서 열입니다. 은 레일 콘솔에서 잘 작동하고 결과를 표시합니다,하지만 난 컨트롤러에서 사용할 때 오류 제공 : 라인

avg = sql_result.to_a[0].prom 

나는 또한 sql_result [0을 사용하여 시도를

ActiveModel::MissingAttributeError (missing attribute: id)

을 그리고 표시 ] .prom 또는 sql_result.take 또는 sql_result.first는 모두 동일한 오류가 발생합니다. sql_result은 이것이다 :

#<ActiveRecord::Relation [#<Property >]> 

이것은

def properties_mean_ppm 
    @statistic = Statistic.find(params[:id]) 
    mode = params[:mode] ? params[:mode] : ANY_MODE 
    type = params[:type] ? params[:type] : ANY_TYPE 
    one_room = @statistic.properties_mean_ppm(mode, 1, type, UF) 
end 

내가 액티브하지 않고 단지 SQL을 사용하여 결과를 얻을 수 있지만 나를 위해 매우 비효율적 방법을 알고 컨트롤러에서 호출 된 작업입니다 I 때문에 이전에 properties() 함수에서 호출 한 많은 필터가 있습니다.

답변

0

속성 객체에서 호출하면 컨트롤러가 결과로 id를 갖는 속성을 기대하게됩니다. 그래서 나는 그것을 힘없이 만들었습니다.

sql_result = properties(mode, rooms, type).select(
    "avg(precio_dolar/dimension_propiedad) as prom, 1 as id" 
) 

그 결과

에 고정 된 ID를 부여