0

对我来说,这是关于.reversevs.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>

这是因为这些函数在它们应该使用的数组类型上有所不同(关联数组与常规数组)?我有哪些选择?

4

2 回答 2

3

ActiveRecord 查询方法(例如whereorderjoins等)返回一个ActiveRecord::Relation. 这允许您链接方法来构建查询,并且在您使用实际数据之前不会执行查询。

由于reverse不是查询方法,它对 Ruby 中的实际数据进行操作,因此执行查询以便 Ruby 可以对数据进行操作,并返回一个Array. 由于现在您只有数据(以 an 的形式Array)而没有 an ActiveRecord::Relation,因此您不能调用另一个查询方法。

于 2012-04-14T17:09:09.480 回答
2

reverse是 activerecord 查询接口之外的方法,而order是接口中的方法。一旦你执行reverse,你就没有资源了,而是一个数组。where在反转输出之前,您需要执行任何 sql 方法(如)。

于 2012-04-14T17:07:35.527 回答