0

je modèle à trois Hotel, Package, PackagePrice et d'association sont comme:tri complexe association en rails3

Hôtel peut avoir de nombreux forfaits et chaque paquet a un packageprice

modèles sont:

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 

et les tables correspondantes sont:

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 |    | 
+------------+----------+------+-----+---------+----------------+ 

Et j'ai des dossiers d'hôtels dans une variable @hotels et je veux filtrer ce @hotels par price dans asc or desc ordre. Alors s'il vous plaît aidez-moi à trouver cette requête.

+0

Si chaque hôtel peut avoir plusieurs prix, quel prix voulez-vous utiliser pour trier? – Slicedpan

+0

@Slicedpan Je veux trier les hôtels par prix du plus bas au plus élevé –

Répondre

2

Vous faire en utilisant cela,

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

Cependant, je ne pense pas que vos modèles sont mis en place la façon dont vous avez décrit, donc je ne sais pas si cela va faire ce que vous voulez