2016-03-31 23 views
1

aracılığıyla böyle has_many :through tarafından ilgili bir Hotel modeli ve HotelAmenity modeli ve Amenity modeli vardır: : ilişki

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 

Şimdi benim eylem hotel_id var

ve ben getirmesini istiyorsan [1,2,3] olan tüm oteller bu , amenity_id.

+0

Bu tesisler, 1 veya daha fazla olan veya tümü ile birlikte olan oteller? Otel kimliğinin eyleminizdeki alaka düzeyi nedir? –

cevap

2

İyi Soru !! Eğer Hotel Model olarak join kullanarak bu sorunu çözebilir Merak etmeyin: Eğer şimdi ile otel bulabilirsiniz hotel_id

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

tarafından otel bulacaksınız Her Birinci 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 

Bu sizin için çalışacağını umuyorum.

0

bu kodu deneyin:

arr= [1,2,3] 
Hotel.joins(:hotel_amenities).select("hotel_amenities.*,hotels.*").where("hotel_amenities.amenity_id= ?",arr)