具有相同编号的多个记录,以最低价格显示一个

时间:2015-09-05 19:26:16

标签: ruby-on-rails

我有一个模特

Model-1有字段

  • 数字价格
  • 价格

数字可以相同。我想显示所有Model-1记录,但如果有两个或更多记录具有相同的编号,我希望它只显示具有最低价格的记录。

例如,如果Model-1.all的结果是

  • 86758号码 - 价格= 20
  • 86758号码 - 价格= 50
  • 23213号码 - 价格= 120
  • 65656号码 - 价格= 30
  • 65656号码 - 价格= 60

我想要哪里有多个相同数字的记录,显示价格最低的一个

    • 86758号码 - 价格= 20
    • 23213号码 - 价格= 120
    • 65656号码 - 价格= 30

    我将如何在Controller中编写查询。

  • 2 个答案:

    答案 0 :(得分:1)

    假设您的模型名称是Modal,然后编写如下查询:

    results = Modal.select('number, min(price) as min_price').group('number')

    在视图中循环结果

      <%= results.each do |result| %>
        <%= result.number %>
        <%= result.min_price %>
      <%= end %>
    

    答案 1 :(得分:1)

    我会做一个模型范围,您可以在控制器中使用它

    它可能会像这样

    scope :number_with_lowest_price, -> {group(:number).having('price = min(price)')}
    

    这样,您可以在需要使用它的模型上使用它

    Model1.number_with_lowest_price
    

    这应该呈现您期望的结果