我有一张运输表和学生和员工表。在传输表中,我有一个列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
并将其插入日期和车辆列?
答案 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%>
我只是向您展示了一种简单的方法,我认为您的代码可以进一步优化。