私は Rails の初心者で、これが単純な質問であることはわかっていますが、気が狂いそうになります。私のアプリは Ruby 1.9.2 と Rails 3.1 で構築されています。ホテルのような部屋の予約を管理するアプリを書いています。したがって、このクラスは宿泊施設を表します。
class Accommodation < ActiveRecord::Base
has_many :reservations, :dependent => :destroy
end
そしてこれは予約です:
class Reservation < ActiveRecord::Base
belongs_to :accommodation
end
予約にはaccommodation_id
、宿泊施設の ID が保存されるという名前のフィールドがあります
ここで、特定の日付範囲で利用可能な宿泊施設を確認する必要があるため、次のメソッドを作成しました。
def self.check_availability(params)
# This return the unavailables accommodations
ids_to_exclude = Reservation.select(:accommodation_id).where('start_date < ? AND end_date > ?', params[:reservation_end_date], params[:reservation_start_date])
# HERE IS THE PROBLEM
accommodations = Accommodation.where("id NOT IN (?)", ids_to_exclude )
accommodations
end
最初のクエリは機能しますが、2 番目のクエリは次を返します。
SELECT `accommodations`.* FROM `accommodation` WHERE (id NOT IN (NULL))
出力しようとしましたids_to_exclude
が、NULLではありません
私は何を間違っていますか?
アップデート:
これをArelで解決しました。以下のコメントに解決策を書きました