如何从rails2.3中的2个表中检索和循环记录

时间:2013-09-06 05:02:33

标签: mysql ruby-on-rails

我有一张运输表和学生和员工表。在传输表中,我有一个列mem_id和mem_type,vehicle_id,日期等....我正在获取这样一个日期的车辆的记录..

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

现在在@mem我收到学生和员工的记录......但是在视图文件中,我在表格中显示学生的姓名,年龄和身份。

@mem.each do |m|
<tr>
            <td><%= link_to m.first_name} %></td>
            <td > <%= m.age %></td>
            <td id="date">  </td>
            <td id="vehicle">vehicle no</td>
          </tr>
<%end%>

#date#vehicle_no中,我需要显示相应的记录vehicle_id和传输日期表。我将如何实现它?我需要加入两个表吗?我不知道如何进行联接操作。或者我是否需要循环@tran并将其插入日期和车辆列?

1 个答案:

答案 0 :(得分:0)

如果你只需要这两列,我认为你不需要添加额外的连接,只需在数组中添加两列,就可以在控制器中获得传输和车辆记录。

我假设你在“运输”模型中有“transport_date”,在“vehicle”模型中有“no”:

@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%>

我只是向您展示了一种简单的方法,我认为您的代码可以进一步优化。