从ruby数组中仅检索唯一记录

时间:2013-09-07 16:45:18

标签: ruby-on-rails

我有一系列学生(学生)。我需要从中删除重复的记录,并获得唯一的学生详细信息。在我的控制台中,我变得像

students = [
  [#<Student id: 2, admission_no: "2", gender: "m", blood_group: "A">, Wed, 11 Sep 2013, "Student"],
  [#<Student id: 17, admission_no: "17",gender: "m", blood_group: "AB">, Sat, 14 Sep 2013, "Student"],
  [#<Student id: 17, admission_no: "17",gender: "m", blood_group: "AB">, Tue, 17 Sep 2013, "Student"],
  [#<Student id: 2, admission_no: "2",gender: "m">, Tue, 17 Sep 2013, "Student"],
  [#<Student id: 17, admission_no: "17",gender: "m", blood_group: "AB">, Thu, 12 Sep 2013, "Student"]
]

我尝试使用students = students.uniq。但它正在获得nil值。因为我还从另一个表中检索了另外两个属性(日期和类型,即最后两个..)。但是我需要显示唯一的学生记录以及它的类型..我该如何做到了吗?请帮忙。 我试图像这样循环一个数组..

@mem = []
@tran = Transport.find_all_by_month_and_vehicle(date,vehicle)
    tran.each do |t|
      @mem << [Student.find_by_id(t.mem_id), t.transport_date, vehicle_no] if t.mem_type=="Student"
      @mem << [Employee.find_by_id(t.mem_id), t.transport_date, vehicle_no] if t.mem_type=="Employee"
    end

在视图页面中,我正在循环它并像这样显示它

@mem.each do |m|
  <tr>
            <td><%= link_to m[0].first_name} %></td>
            <td > <%= m[0].age %></td>
            <td id="date"> m[1] </td>
            <td id="vehicle"> m[2] </td>
  </tr>
<%end%>

2 个答案:

答案 0 :(得分:0)

我认为更好的方法是改进您的活动记录查询。但是,如果出于某种原因,无论出于何种原因,那么你所处理的是uniq是最简单的方法,只需将id添加到uniq语句即可。

students = students.uniq(&:id)

答案 1 :(得分:0)

从控制台开始。转到项目根目录并键入rails console

现在尝试根据您的需要找到合适的连接命令..有时候这需要反复试验(对我来说无论如何)

我会尝试类似的事情:

Transport.joins(:students).select('students.id, transport_date, vehicle_no, mem_type').group('students.id').where(:mem_type=>"Student")

您的模型和表中的外键必须具有适当的关联。

http://guides.rubyonrails.org/active_record_querying.html#joining-tables