【问题标题】:Active Record sort by min valueActive Record 按最小值排序
【发布时间】:2013-07-07 19:55:32
【问题描述】:

我有几个模型,City、Hotel 和 Room。城市has_many酒店,酒店has_many房间。每个房间都有价格。我正在尝试按最低价格的房间,升序和降序排序。

在我的结果中,我还显示了酒店的最低价格。我可以用这个成功地按价格排序

City.first.includes(hotel: :rooms).order("rooms.price asc")

但由于我想始终显示最低价格,如果我想从高到低排序,这不起作用,因为它按酒店的最高房价排序。

有没有办法按酒店最低房价排序?如果我尝试通过MIN(rooms.price) desc 订购,我会收到错误消息。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord


    【解决方案1】:

    城市模型

    attr_accessible :name
    has_many :hotels
    

    酒店模型

    attr_accessible :city_id, :name
    has_many :rooms
    belongs_to :city
    

    城市模型

    attr_accessible :hotel_id, :name, :price
    belongs_to :hotel
    

    请试一试

    @rooms = Room.includes([:hotel => [:city]]).select('hotel_id, MIN(price) AS price').group('hotel_id').order('MIN(rooms.price) ASC')
    

    在您的视图文件中

    <% @rooms.each do |room| %>
     <div>
       <div><%= room.hotel.name</div>
       <div><%= room.hotel.city%></div>
       <div><%= room.price%></div>
     </div>
    <% end %>
    

    【讨论】:

    • 如果我想为特定城市选择酒店怎么办?
    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2019-06-03
    • 1970-01-01
    • 2014-09-22
    • 2015-06-18
    • 2022-12-16
    相关资源
    最近更新 更多