【发布时间】:2012-06-21 18:17:18
【问题描述】:
我是 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
Reservation 确实有一个名为 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
第一个查询有效,但第二个返回:
SELECT `accommodations`.* FROM `accommodation` WHERE (id NOT IN (NULL))
我尝试输出 ids_to_exclude 并且不是 NULL
我做错了什么?
更新:
我用 Arel 解决了这个问题。我在下面的评论中写了解决方案
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord