0

我有一个运输表和学生和员工表。在运输表中,我有一列 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 中,我正在获取学生和员工的记录......但在视图文件中,我在表格中显示学生的姓名、年龄和 ID。

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

#dateand#vehicle_no中,我需要显示vehicle_idTransport 表的相应记录和日期。我将如何实现它?我需要为此加入两个表吗?我不确定如何进行加入操作。或者我是否需要循环@tran并将其插入日期和车辆列?

4

1 回答 1

0

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

我假设您在“transport”模型中有“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%>

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

于 2013-09-06T05:18:56.217 回答