Sum ActiveRecord关系(模型+模型=数组?)

时间:2017-10-21 17:46:49

标签: ruby-on-rails arrays ruby activerecord model

我正在尝试将两个活动模型关系相加并按created_at对其进行排序。 狗和猫的总和制作阵列。所以我尝试用created_at .sort_by( &:created_at )对这个数组进行排序,但是我得到了这个奇怪的错误:

dogs = current_user.dogs
cats = current_user.cats
total = (dogs + cats).sort_by( &:created_at )

comparison of ActiveSupport::TimeWithZone with nil failed

还有另一种最佳方法可以将两个活动记录关系相加并按created_at?

对其进行排序

非常感谢。

2 个答案:

答案 0 :(得分:2)

您的某个结果似乎有created_at nil,这就是您收到该错误的原因。您可以执行以下操作来过滤nil结果

dogs = current_user.dogs.where.not(created_at: nil)
cats = current_user.cats.where.not(created_at: nil)
sorted_results = (dogs + cats).sort_by(&:created_at)

如果您想查看哪些记录created_atnil

nil_created_at_dogs = current_user.dogs.where(created_at: nil)
nil_created_at_cats = current_user.cats.where(created_at: nil)

答案 1 :(得分:0)

我解决了这个问题。

如果使用.where,一切正常。

dogs = Dog.where(user_id: current_user.id)
cats = Cat.where(user_id: current_user.id)
total = (dogs + cats).sort_by( &:created_at )

我不知道为什么,但这就是方法。