我正在尝试将两个活动模型关系相加并按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?
对其进行排序非常感谢。
答案 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_at
为nil
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 )
我不知道为什么,但这就是方法。