【问题标题】:Complex sorting on association in rails3rails3中关联的复杂排序
【发布时间】:2013-09-24 17:02:06
【问题描述】:

我有三个模型HotelPackagePackagePrice,关联如下:

酒店可以有多个套餐,每个套餐有一个套餐价格

型号是:

class Hotel < ActiveRecord::Base
  attr_accessor :excel_sheet, :excel_sheet_file_name
  attr_accessible :hotel_name, :stars, :location, :searchable, :excel_sheet, :excel_sheet_file_name

  has_many :package_prices, :dependent => :destroy
  has_many :packages, :through => :package_prices, :order => 'package_prices.price'
end


class Package < ActiveRecord::Base
  attr_accessible :package_name
  has_many :package_prices, :dependent => :destroy, :order => 'price DESC'
  has_many :hotels, :through => :package_prices, :order => 'package.package_prices.price'
end

class PackagePrice < ActiveRecord::Base
  attr_accessible :price, :package_id, :hotel_id
  belongs_to :package
  belongs_to :hotel
end  

对应的表格是:

mysql> desc hotels
    -> ;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| hotel_name | varchar(255) | YES  |     | NULL    |                |
| stars      | varchar(255) | YES  |     | NULL    |                |
| location   | varchar(255) | YES  |     | NULL    |                |
| created_at | datetime     | NO   |     | NULL    |                |
| updated_at | datetime     | NO   |     | NULL    |                |
| searchable | tinyint(1)   | YES  |     | 1       |                |
+------------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

mysql> desc packages;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| package_name | varchar(255) | YES  |     | NULL    |                |
| created_at   | datetime     | NO   |     | NULL    |                |
| updated_at   | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> desc package_prices;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| package_id | int(11)  | YES  |     | NULL    |                |
| price      | int(11)  | YES  |     | NULL    |                |
| created_at | datetime | NO   |     | NULL    |                |
| updated_at | datetime | NO   |     | NULL    |                |
| hotel_id   | int(11)  | YES  |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+

我在变量@hotels 中有酒店记录,我想按asc or desc 顺序按price 过滤此@hotels。所以请帮我找出这个查询。

【问题讨论】:

  • 如果每家酒店可以有多个价格,您想使用哪个价格进行排序?
  • @Slicedpan 我想按价格从低到高对酒店进行排序

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 associations


【解决方案1】:

你会用这个来做到这一点,

@hotels = Hotel.joins(:package_prices).order('package_prices.price')

但是我不认为你的模型是按照你描述的方式设置的,所以我不确定这是否会达到你想要的效果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2015-02-06
    相关资源
    最近更新 更多