我的用户模型中有一个距离属性:
attr_accessor :distance因此,当我计算每个用户的距离,并将其存储在远处时,我可以对它们排序如下:
users.sort_by!(&:distance)并根据距离对用户进行适当的排序。但当我包括其他相关方法时,即:
users.includes(:photo).sort_by!(&:distance)这根本不对用户进行排序,这是为什么?我怎样才能用距离来分类,但也包括关联呢?
发布于 2014-01-31 15:39:26
!方法中的sort_by!指示对象本身被更改,而不是返回不同的对象。当您调用users.includes(:photo)时,此方法返回一个不同的对象。所以,你实际上所做的是:
users2 = users.includes(:photo)
users2.sort_by!(&:distance)这就是为什么在调用sort_by!之后用户对象没有排序的原因。一个更好的方法可能是
users = users.includes(:photo).sort_by(&:distance)发布于 2014-01-31 15:17:17
对我来说是这样的。我做“用户”,而不是“用户”
User.includes(:photo).sort_by!(&:distance)“用户”变量到底持有什么?试一试用户。
与我的例子编辑,这里我的用户查询用户和得分的距离。
1.9.3p385 :059 > Enquiry.all.sort_by!(&:score).map &:score
Enquiry Load (0.7ms) SELECT `enquiries`.* FROM `enquiries`
=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 10, 10]
1.9.3p385 :060 > Enquiry.includes(:follow_ups).sort_by!(&:score).map &:score
Enquiry Load (0.1ms) SELECT `enquiries`.* FROM `enquiries`
FollowUp Load (0.1ms) SELECT `follow_ups`.* FROM `follow_ups` WHERE `follow_ups`.`enquiry_id` IN (55, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 85, 86, 89, 91, 92, 93, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127)
=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 10, 10]
1.9.3p385 :057 > enquiries = Enquiry.where(status_id: [1,2,3])
1.9.3p385 :061 > enquiries.includes(:follow_ups).sort_by!(&:score).map &:score
Enquiry Load (0.5ms) SELECT `enquiries`.* FROM `enquiries` WHERE `enquiries`.`status_id` IN (1, 2, 3)
FollowUp Load (0.2ms) SELECT `follow_ups`.* FROM `follow_ups` WHERE `follow_ups`.`enquiry_id` IN (68, 75, 78, 91, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 116, 117, 120, 122, 123, 124, 125, 126, 127)
=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 5, 5, 5, 5, 5, 5, 5, 7, 8, 8, 10] 注意:你的问题错了,你否决了我。
发布于 2014-01-31 15:07:41
我相信你应该这么做
users.sort_by!(&:distance).includes(:photo)https://stackoverflow.com/questions/21483220
复制相似问题