活动记录按最小值排序

时间:2013-07-07 19:55:33

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

我有几个型号,城市,酒店和房间。城市has_many酒店,酒店has_many间客房。每个房间都有价格。我试图按最低价格房间排序,asc和desc。

在我的结果中,我也显示了酒店的最低价格。我能用这个

成功地按价格排序

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

但是因为我想要始终显示最低价格,所以如果我想从高到低排序,这是行不通的,因为它按酒店的最高房价排序。

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

1 个答案:

答案 0 :(得分: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 %>