急切的装载工作直到特殊情况

时间:2012-11-03 19:12:30

标签: ruby-on-rails-3.2 eager-loading

我有一个Staff模型,它有很多staff_orders

class Staff < Ressource
  has_many :staff_orders

staff_orders包含from_date和to_date。 在此期间,工作人员被占用。

我想创建一个工作人员下拉列表, 在每个staff_member后面显示日期, 当他被占领时: “Ralph Allen(11月1日 - 11月2日,11月4日 - 11月5日)”

在这种情况下,热切的加载效果非常好。我需要使用LEFT JOIN, 因为我想列出所有工作人员,无论天气如何,他们都被工作人员占用。

@staff_collection = Staff.joins("LEFT JOIN staff_orders ON
  staffs.id=staff_orders.staff_id").
  collect{ |x| [x.long_name, x.id] }  

但现在是棘手的部分。现在我只想在工作人员姓名后面添加一段特定时间跨度(例如本周)的被占用信息。 例如: “拉尔夫艾伦(11月4日 - 11月5日)”

@staff_collection = Staff.joins("LEFT JOIN staff_orders ON
  ressources.id=staff_orders.staff_id").
  collect{ |x| [x.long_name_occupied(@from_date,@to_date), x.id] }  

我通过调用名称方法并将过滤日期作为参数来完成此操作。 现在它不再执行急切加载。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

似乎您可以使用原始的select语句并在其上抛出where子句,该子句仅返回开始/停止日期为&lt; = @to_date的时间。