Ruby on Rails – 在’:include =>’上添加条件以加载有限数量的对象

我有两个模型User和Event。 基数是一个用户有很多事件。 当我查询数据库以向我提供所有用户及其相应的事件时,它返回正确的结果。 示例语句:Users.find(:all,:include => [:events])

但是,我需要帮助的是根据条件为用户获取事件。 我需要为每个返回的用户提供仅计划今天安排的事件(例如:CREATED_DATE = TODAY)。 也就是说,我不希望所有与用户相关的事件。 说,我仍然需要在数据库中找到所有用户,但是对于那些今天没有安排事件的用户,他们不应该在哈希映射中加载事件。

有人可以帮我修改“Users.find(:all,:include => [:events])”Rails语句,这样我只能获得用户的某些事件,而不是所有事件?

谢谢,S

据我所知,您不能以您描述的方式使用:include选项。

无论如何,获得所有活动有什么问题? 无论如何,您必须加载/加入/查询事件表。 但是,如果您实例化所有事件,则需要更多内存。

当然,您可以执行两个查询,一个用于具有“今天”事件的用户,另一个用于没有事件的用户。

你也可以反过来:

Event.find(:all, :conditions => "...only today...", :include => :user) 

这将为您提供包括用户在内的所有活动。 您可以使用另一个查询来获取所有用户而不包括事件,并在内存中完成其余操作。

这些方面的东西应该有效:

 # Rails 3 User.includes(:events).where(:events => {:created_at => Time.now.midnight..Time.now.tomorrow.midnight}) # Rails 2 User.find(:all, :includes => :events, :conditions => ["events.created_at between ? and ?", Time.now.midnight, Time.now.tomorrow.midnight]) 

Time.now.tomorrow.midnight非常讨厌。 1.day.from_now.midnight可能稍微不那么讨厌,取决于你的偏好;)