2016-03-31 12 views
1

を通じて私はこのようなhas_many :throughによって関連しているHotelモデルとHotelAmenityモデルとAmenityモデルいますにhas_manyに参加使用してレコードをフェッチします:関係

class Hotel < ActiveRecord::Base 
    has_many :hotel_amenities, :dependent => :destroy 
    has_many :amenities, through: :hotel_amenities 
end 

class Amenity < ActiveRecord::Base 
    has_many :hotel_amenities, :dependent => :destroy 
    has_many :hotels, through: :hotel_amenities 
end 


class HotelAmenity < ActiveRecord::Base 
    belongs_to :amenity 
    belongs_to :hotel 
end 

は今、私は自分の行動にhotel_idを持っていると私は取得したいですアメニティが[1,2,3]のすべてのホテルは、arrayamenity_idです。

+0

これらのアメニティの1つまたは複数のもの、またはそれらのすべてを備えたホテルですか?あなたの行動にホテルIDの関連性は何ですか? –

答えて

2

良い質問を! のようにあなたがHotel Modeljoinを使用してこの問題を解決することができます心配しないでください:あなたはhotel_id

@hotel= Hotel.find_by_id(params[:user_id)) 

でホテルを見つけるまず 今、あなたはamenity_array[1,2,3]

@hotels = @hotels.joins(:hotel_amenities).where(hotel_amenities: { amenity_id: [1,2,3] }) // this can returns a hotel two or more time 


@hotels = @hotels.joins(:hotel_amenities).where(hotel_amenities: { amenity_id: [1,2,3] }).uniq // this will return all hotels without redundant records 
でホテルを見つけることができます

これがうまくいくと思います。

0

は、このコードを試してみてください。

arr= [1,2,3] 
Hotel.joins(:hotel_amenities).select("hotel_amenities.*,hotels.*").where("hotel_amenities.amenity_id= ?",arr) 
関連する問題