我有一个可以预订的资源房间。同样,资源预订属于一个房间。
我的预订模型有一个starts_at和一个ends_at属性。
在我对房间控制器的索引操作中,我希望获得所有房间并包含特定日期的所有预订(日期作为参数提供)。
我已经尝试过这段代码,但它似乎没有按预期工作。
@rooms = Room.includes(:reservations).where("reservations.starts_at" => params[:date])
我知道这段代码没有考虑到房间可以保留多天,但我必须从某个地方开始。
SUM UP
根据日期,操作应返回所有房间,但仅包括与该日期相关的预订。
修改
这就是我最终要做的事情。
控制器/ rooms_controller.rb
def index
@rooms = Room.includes(:reservations)
@date = params[:date] ||= Date.today
end
视图/房间/ index.html.haml
- @rooms.each do |room|
- room.reservations.relevant(@date).each do |reservation|
= reservation.id
模型/ reservation.rb
def self.relevant(date = Date.today)
if date.blank?
date = Date.today
end
where(
'(starts_at BETWEEN ? AND ?) OR (ends_at BETWEEN ? AND ?)',
date.to_date.beginning_of_day, date.to_date.end_of_day,
date.to_date.beginning_of_day, date.to_date.end_of_day
)
end
它运作正常,但视图是与我认为的模型对话?
答案 0 :(得分:1)
如果您的where
条件引用了另一个表格,那么您还需要指定references
以及includes
。例如
@rooms = Room.includes(:reservations).
where("reservations.starts_at" => params[:date]).
references(:reservations)
请参阅API文档here。