我是 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
第一个查询有效,但第二个返回:
SELECT `accommodations`.* FROM `accommodation` WHERE (id NOT IN (NULL))
我试图输出ids_to_exclude
并且不是NULL
我究竟做错了什么?
更新:
我用 Arel 解决了这个问题。我在下面的评论中写了解决方案