我正在根据帐户余额创建图表。这是我的一些代码
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个月的结果?
提前致谢!
答案 0 :(得分:1)
# ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
balance: orders_by_day[date].try(:first).try(:total_balance) || 0
try
是由rails和defined on Object
class引入的方法,因此它也在NilClass
上定义。
实现是quite straightforward:它检查接收方是否为空并返回调用的结果,否则返回nil
。