我在网络应用程序,Postgresql数据库和squeel gem中使用Rails 4进行查询。
我的模型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是属性表中的列。 它在Rails控制台中工作正常并显示结果,但是当我在控制器上使用它时会出错:
ActiveModel :: MissingAttributeError(缺少属性:id)
并表示该行
avg = sql_result.to_a[0].prom
我也尝试过使用sql_result [0] .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
我知道如何仅使用没有activerecord的SQL来获得结果,但这对我来说效率非常低,因为我在properties()函数中有很多过滤器之前调用
答案 0 :(得分:0)
似乎从属性对象调用它使控制器期望具有id作为结果的Property。所以我没有发出刺耳的声音。
sql_result = properties(mode, rooms, type).select(
"avg(precio_dolar / dimension_propiedad) as prom, 1 as id"
)
为结果提供固定ID