我是Rails的新手,我知道这是一个简单的问题,但它让我发疯。 我的应用程序是用Ruby 1.9.2和Rails 3.1构建的。 我正在写一个应用程序来管理酒店式的房间预订。 所以这个类代表住宿:Rails和如何使子选择ids
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解决了这个问题。我写了下面
感谢您的回复,但是我发现Arel避免了'每个do'块的解决方案 –