我有一个数组,它是来自一个ActiveRecord表的ID。 所以我想根据与该ID相关联的姓氏对该数组进行排序......我该怎么做? 澄清: array @ students = [],里面是ID,我想按Student.find(ID).last排序 谢谢。 Dorijan
答案 0 :(得分:5)
如果你没有完全理解这个问题,如果给你一个id列表,你可以在进行查询时按last_name排序:
Student.where("id IN (?)", @students).order(:last_name)
当然,这假设@students是一个id数组而不是别的。
回应你的评论,我不确定你为什么需要这样做,但是如果你的@student数组只是一个不知道Student模型及其属性的id列表,你仍然想订购那个数组,你可以这样做:
@students = Student.where("id IN (?)", @students).order(:last_name).collect(&:id)
这将返回按姓氏排序的id数组。但是,我真的不知道你在幕后发生了什么,我不确定你要求的是什么。
答案 1 :(得分:2)
根据您的评论,您要执行以下操作:
您应该能够执行以下操作:
Student.where(:id => @ids).order(:last_name).map(&:id)
打破这个局面:
where(:id => @ids)
仅选择ID数组中具有ID的学生。order(:last_name)
按姓氏排序结果。map(&:id)
接收Students
数组,只返回ID列。基本上,为每个找到的学生调用括号中的方法(这是为每个学生调用id
的快捷方式),并将返回值组合成一个新数组(只包含id)。一些问题:
select(:id)
,这样就不会从数据库中提取学生记录的每一列。答案 2 :(得分:0)
Student.find( @students ).sort_by { |s| s.last_name }