排序有很多关联

时间:2017-04-01 01:00:31

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我正在建造一个酒店应用程序,我想按照它最便宜的房间价格对所有酒店进行分类,但我似乎无法实现我的目标。

  

Roomtype Model>>

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

酒店模特&gt;&gt;

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

排序

3 个答案:

答案 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

提供帮助

答案 1 :(得分:0)

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

我认为default_scope订单应该是升序的,因为您希望价格从小到大排序。

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

然后Hotel.first.room_types会给你想要的结果。

答案 2 :(得分:0)

首先,房间类型按价格排序

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使用数组

进行排序
class HotelsController < ApplicationController
  def index
    @hotels = Hotel.all.sort_by{ |u| u.roomtypes.last.price }
  end
end

这对我来说是最好的解决方案!