【发布时间】:2014-11-27 11:55:34
【问题描述】:
我想计算自“date_from”以来的平均天数(它会有所不同)
User.all.average('? - date_from', Time.now.to_date)
给出错误
undefined method `except' for Thu, 27 Nov 2014:Date
【问题讨论】:
标签: ruby-on-rails postgresql date average
我想计算自“date_from”以来的平均天数(它会有所不同)
User.all.average('? - date_from', Time.now.to_date)
给出错误
undefined method `except' for Thu, 27 Nov 2014:Date
【问题讨论】:
标签: ruby-on-rails postgresql date average
见Ruby_on_Rails/ActiveRecord/Calculations
average的第二个参数是options(一个哈希)
这些选项可用于通过 :conditions、:order、:group、:have 和 :joins 自定义查询。
所以你应该生成这样的平均表达式:
User.average("'#{Time.now.to_date}' - date_from" )
然后 Rails 会生成这样的 SQL:
SELECT AVG('2014-11-27' - date_from) AS avg_id FROM ...
【讨论】:
你可以试试Date的::today方法,而不是Time的::now:
User.all.average('? - date_from', Date.today)
【讨论】:
怎么样:
#get difference fro all users from Time.now and date_from
dates = User.all.pluck(:date_from).map{|date| Time.now - date}
#sum all elements from array and divide with number of elements
#to get average
days = dates.reduce(0,:+)/dates.length
#round to 2 decimal places for better display
days = days.round(2)
【讨论】: