我想执行以下操作:
案例1:
x = Group.all[0].people
x.class
=> Array
x.order
细。 :)
案例2:
y = Person.all
y.class
=> Array
y.order
=> NoMethodError: undefined method `order' for #<Array:0x718c278>
:(
x和y都包含相同类型的项目 - 一堆Person模型。 为什么ruby不能对数组进行排序?
先谢谢
答案 0 :(得分:4)
因为在Rails 3中,方法all(GitHub)返回一个数组。它不能与订购方法一起订购。
虽然你可以使用sort方法来做订购。
people
返回一个ActiveRecord::Relation
对象,然后可以进一步限定范围。
幸运的是ActiveRecord::Relation
有to_a
方法会返回一个你可以排序的数组。
答案 1 :(得分:1)
好的,所以Group.all.first.person不会返回一个数组。它看起来确实如此,但实际上它是ActiveRecord AREL的一部分,允许您将关系和范围链接在一起。
当您在#order
上致电Group.all.first.person
时,您实际上正在调用“订单”范围,告诉查询人员什么都不订购。
如果拨打
,您将收到相同的错误Group.all.first.person.all.order
NoMethodError: undefined method `order' for #<Array:0x007fe7dd03ff08>
重要的是“#all”。
在红宝石中,没有“订单”方法。有一个sort和sort_by