我想执行以下操作:
案例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都包含相同类型的项目 - 一堆人模型。Ruby为什么不能订购数组?
预先感谢
,因为在导轨3中,方法all(github)返回一个数组。它不能用订单方法订购。
尽管您可以使用Sort方法来进行订购。
people
返回一个可以进一步范围范围的 ActiveRecord::Relation
对象。
Fortunatelly ActiveRecord::Relation
具有to_a
方法,该方法将返回您可以排序的数组。
好的,所以group.all.first.person不会返回数组。看起来确实如此,但实际上,它是Activerecord Arel的一部分,它使您可以将关系和范围融合在一起。
当您在Group.all.first.person
上调用#order
时,您实际上是在调用"订单"范围,告诉查询以无需订购个人。
如果您致电
,您将遇到相同的错误Group.all.first.person.all.order
NoMethodError: undefined method `order' for #<Array:0x007fe7dd03ff08>
重要的是" #all"。
在Ruby中,没有"顺序"方法。有一种and_by