컨트롤러에서이 코드를 사용하여 Heavy
분류의 모든 사용자에 대해 평균 paper_weight
에 액세스하고 있습니다.ActiveRecord : 계산시 nil을 0으로 처리 하시겠습니까?
if User.where(industry_type: 'Heavy')
.joins(:papers)
.where(papers: { paper_type: 'Officepaper' })
.pluck('avg(paper_weight)').first.nil?
@heavy_indust_officepaper == 0
else
@heavy_indust_officepaper = User.where(industry_type: 'Heavy')
.joins(:papers)
.where(papers: { paper_type: 'Officepaper' })
.pluck('avg(paper_weight)').first * 3
end
이어서 가변 @heavy_indust_officepaper
는 도면에 표시되어있다.
문제는 하나 이상의 사용자가 항목을 paper_type: 'Officepaper'
에 넣었을 때 위의 코드가 평균값을 올바르게 계산하지 않는 것입니다.
나는 내가 그들의 industry_type: 'Heavy'
하나에 두 명의 사용자를 가지고 있기 때문에 소수 (30) 되고 다른 사용자가 paper_type: 'Officepaper'
에서 nil
항목이 paper_type: 'Officepaper'
의 하나 개의 항목을 가지고 있음을 알고있다. 나의 이해함으로써
계산은 30 + 0/2(users) = 15
다음 15
가 45
를 제공해야하지만 그 대신 변수 @heavy_indust_officepaper
보기에 90
를 표시 ...을해야하는하는 3
를 곱해야한다 30 * 3
의 결과
위 코드에서 nil
을 0
으로 변환하는 방법이 있습니까 ???
제발 나 한테 조언 해 줄 수있어? 여기
내가 하루 일찍 물어 질문에 대한 링크입니다, 내가 (다른 사람의 사이에서) Using .average with .pluck in ruby on rails app?
당신을했다 'nil.to_i'을 시도해보십시오. 'irb'에서 해보십시오 ...'.first.to_i * 3' ... 그냥 생각보다 ... – Myst
로컬 변수를 사용하는 대신 동일한 쿼리를 두 번 실행하는 이유는 무엇입니까? – max
안녕하세요, http://stackoverflow.com/questions/22220449/sql-avg-with-null-values가 도움이 될 수도 있습니다 – Bohdan