Rails:时间错误图表

时间:2015-09-25 15:46:23

标签: ruby-on-rails ruby activerecord

我正在根据帐户余额创建图表。这是我的一些代码

module AccountsHelper
  def products_chart_data
    orders_by_day = Account.total_grouped_by_day(3.days.ago)
    (3.days.ago.to_date..Date.today).map do |date|
      {
        created_at: date,
        balance: orders_by_day[date].first.try(:total_balance) || 0 
      }
    end
  end
end

class Account < ActiveRecord::Base
  belongs_to :user
  has_many :books

  def self.total_grouped_by_day(start)
    balances = where(created_at: start.beginning_of_day..Time.zone.now)
    balances = balances.group("date(created_at)")
    balances = balances.select("created_at, balance as total_balance")
    balances.group_by {|o| o.created_at.to_date }
  end

end

我的问题是:

1)我收到错误未定义方法`first&#39;映射3.days.ago时,但在我将其更改为2.days.ago时成功运行代码。我知道这是因为我在3天前没有数据,因为这个帐户是新的。我的问题是,如何解决这个错误,因为我可能还有许多其他没有数据的新帐户,我可以做些什么来显示1个月或2个月的结果?

提前致谢!

1 个答案:

答案 0 :(得分:1)

#                            ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
balance: orders_by_day[date].try(:first).try(:total_balance) || 0 

try是由rails和defined on Object class引入的方法,因此它也在NilClass上定义。

实现是quite straightforward:它检查接收方是否为空并返回调用的结果,否则返回nil