在ruby上列出两列

时间:2014-12-10 13:35:28

标签: ruby-on-rails ruby

尝试显示项目列表。我有物品和校准。我希望从校准中显示来自项目+ date_cal_expired的所有数据(选择最大日期,因为一个项目可以有很多校准)。

在控制器中

@items = Item.includes(:calibrations).where('calibrations.date_cal_expired <= ?' , now)  

在索引中

<% @items.each do |item| %>
<tr>
    <td><%= item.den_cont %></td>
    <td><%= item.marca %></td>
    <td><%= item.modelo %></td>
    <td><%= item.nro_serie %></td>
    <td><%= item.genre.genre %></td>
    <td><%= item.state.state %></td>  

我应该怎么做才能显示date_cal_expired?
我不知道如何显示其他表中的数据 希望你能理解。 TKS!

4 个答案:

答案 0 :(得分:0)

item.calibrations.pluck(:date_cal_expired).max

答案 1 :(得分:0)

您已使用

显示其他表格中的数据
<td><%= item.genre.genre %></td> // this way you go to table genre and display field genre

如果你想要其他表中的数据,你应该放

<td>
   <% item.calibrations.each do |calibration| %>
      <%= calibration.field_1 %>
      // ....
      <%= calibration.field_n %>
   <% end %>
</td>

答案 2 :(得分:0)

item.calibrations.max(&#34;你的价值&#34;)

答案 3 :(得分:0)

如果您想执行单个查询:

Item.select("items.*, c.date_cal_expired AS date_cal_expired")
    .joins("LEFT JOIN calibrations AS c ON c.item_id = item.id 
            WHERE NOT EXISTS(SELECT 1 FROM calibrations AS j 
                               WHERE c.item_id = j.item.id 
                                 AND t.date_cal_expired < j.date_cal_expired)")

现在date_cal_expired是项目的属性:

<% item.date_cal_expired %>

或简单的解决方案:

<% item.calibrations.map(&:date_cal_expired).try(:max) %>