【发布时间】:2014-10-15 08:46:26
【问题描述】:
我有一个样板间,在某些日子有某些预订。我有一个方法,如果在一段时间内有任何预订,就会返回。我如何才能获得该期间内没有预订的所有房间?
这是我现在拥有的代码,但是当我使用时
@rooms = @category.rooms.availible(@date_start, @date_end),
无论什么关系,它都会返回所有房间。当我使用
room.reservations.where("date_start >= ? || date_end <= ?", startd, endd).count
返回金额就好了-.-
class Room < ActiveRecord::Base
attr_accessible :cat_id, :room_nr
validates_uniqueness_of :room_nr
has_many :reservations
belongs_to :category, foreign_key: "cat_id"
def self.availible(startd, endd)
where(self.Resvs(startd, endd)==0)
end
def self.Resvs(startd, endd)
return joins(:reservations).where("date_start >= ? || date_end <= ?", startd, endd).count
end
end
我现在将查询移至控制器,以获取我使用的房间
@rooms = @category.rooms.joins('LEFT OUTER JOIN reservations ON reservations.room_id = rooms.id').where("date_start >= ? || date_end <= ?", @date_start, @date_end)
但这会返回所有已预订的房间,无论是什么日期(房间也需要来自其父级@category)
接近了,改变它选择像这样取消预订的那些
@rooms = @category.rooms.joins('LEFT OUTER JOIN reservations ON reservations.room_id = rooms.id').
where("room_id IS NULL OR date_start > ? OR date_end < ?", @date_end, @date_start)
适用于一个预订,但是当我在一个房间上添加更多预订时不再起作用
【问题讨论】:
-
你能举一些例子,比如这个查询返回什么,你期望它返回什么?
标签: ruby-on-rails ruby ruby-on-rails-3 relation