显示最后两(几)个值而不在rails

时间:2018-05-09 09:45:55

标签: ruby-on-rails

您好我正在尝试在我的索引页面中显示最后两个(少数)值如何在rails中执行此操作?

这是我的_index.html.erb文件(以新的方式呈现)

    <table class="table table-hover">

    <% PriceLog.order(price_date: :desc).each_with_index do |price_dated,index| %>  // problem is here in looping
    <tr>
        <% @products.each do |product| %>
            <td>
                <%=  PriceLog.where({product_id: product.id, price_date: price_dated.price_date}).last.price_date.strftime('%d-%B-%Y')  %>
            </td>
            <td>
                <%=  PriceLog.where({product_id: product.id, price_date: price_dated.price_date}).last.price %>
            </td>       
        <% end %>
    </tr>
    <% end %>
</table>

并在我的控制器中

  def new
    @pricelog = PriceLog.new
    @products = Product.all
    @price = PriceLog.all
  end
  

更新

以下是我得到的输出我有三种不同的产品,如Product1,Product2,Product3以及相应的日期和价格

enter image description here

这里我的值重复3次(每次我点击提交表单值时显示3次但存储一次)我应该如何停止复制并仅显示最后几个值

任何帮助都必须得到赞赏

谢谢

3 个答案:

答案 0 :(得分:1)

您是否尝试过Model.last(2)行?

答案 1 :(得分:1)

您正在循环中运行循环。您的PriceLog.each_with_index遍历所有PriceLogs,然后在其中您的@ products.each(您在控制器中定义)循环遍历您的所有产品。因此,每个产品都会针对每个PriceLog重复一次。

除此之外,您的视图中有很多逻辑。通常不赞成从那里打电话给模特;应该在控制器,帮助器或一些自定义演示者对象中发生。

答案 2 :(得分:1)

在您的控制器中而不是

@products = Product.all

将其更改为

@products = Product.all.order("id DESC").limit(2)