对我来说,这是关于.reverse
vs .order('id DESC')
如果我有
history = where(user_id: user).order('id DESC')
我仍然可以执行其他查询,例如history.where(person_id: person)
如果我有
history = where(user_id: user).reverse
我得到:NoMethodError: undefined method 'where' for #<Array:0x000001031a3408>
这是因为这些函数在它们应该使用的数组类型上有所不同(关联与常规数组)吗?我有什么选择?
答案 0 :(得分:3)
ActiveRecord query methods(例如where
,order
,joins
等)返回ActiveRecord::Relation
。这允许您链接方法以构建查询,并且在您使用实际数据之前不会执行查询。
由于reverse
不是查询方法,因此它对Ruby中的实际数据进行操作,因此执行查询以便Ruby可以对数据进行操作,并返回Array
。由于现在您只有数据(以Array
的形式)而不是ActiveRecord::Relation
,因此您无法调用其他查询方法。
答案 1 :(得分:2)
reverse
是activerecord查询接口之外的方法,而order
位于接口中。执行reverse
后,您将不再拥有资源,而是一个数组。在反转输出之前,您需要执行任何sql方法(如where
)。