2017-04-01 137 views
0

我正在建設一個酒店的應用程序,我想通過它的最便宜的房間的價格排序所有酒店,但我似乎無法實現我的目標。排序有很多協會

Roomtype型號>>

class Roomtype < ActiveRecord::Base 
    mount_uploader :image, RimageUploader 
    belongs_to :hotel 
    has_many :order_items 
    default_scope { order(:price => :desc)} 
end 

酒店型號>>

class Hotel < ActiveRecord::Base 
    has_many :roomtypes, -> { order(:price => :desc) } 
    has_many :hotel_images 
    belongs_to :destination 
    belongs_to :area 
    accepts_nested_attributes_for :hotel_images 

    def price 
    price = self.roomtypes.last.price 
    end 

end 

我需要的酒店一default_scope通過Hotel.find(params[:id]).roomtypes.last.price

回答

0

首先Roomtypes是按價格排列

class Roomtype < ActiveRecord::Base 
    belongs_to :hotel 
    default_scope { order(:price => :desc)} 
end 

所以,酒店last roomtypecheapest

我得到了我想要的東西; sorting the list of Hotels by it's cheapest roomtype通過使用陣列進行排序

​​

這對我來說是最好的解決方案!

0
排序

我認爲default_scope訂單應該是遞增的,因爲您希望將價格從小到大排序。

default_scope { order(:price => :asc)} 

然後Hotel.first.room_types應該給你你想要的結果。

+0

我不是在談論房型排序 –

+0

我想**'酒店被排序的最便宜的房間類型'** –

+0

這就是;每個「酒店」有不同的價格**的**房型,但我想要酒店按**最低房型價格** –

1

查找所有酒店按升序排序的最便宜總房型價格。

class Hotel < ActiveRecord::Base 
    has_many :roomtypes 
    default_scope { joins(:roomtypes).group("roomtypes.hotel_id").order("sum(roomtypes.price) asc") } 
    end 

注: Roomtypes表| hotel_id |價格| 您可以根據您的代碼要求更改屬性名稱。

的幫助下通過Dixit Patel