par*_*zan 6 ruby ruby-on-rails
我有两个模型User和Event.基数是一个用户有很多事件.当我查询数据库以向我提供所有用户及其相应的事件时,它返回正确的结果.示例语句:Users.find(:all,:include => [:events])
但是,我需要帮助的是根据条件为用户获取事件.我需要为每个返回的用户提供仅计划今天安排的事件(例如:CREATED_DATE = TODAY).也就是说,我不希望所有与用户相关的事件.说,我仍然需要在数据库中找到所有用户,但是对于那些今天没有安排事件的用户,他们不应该在哈希映射中加载事件.
有人可以帮我修改"Users.find(:all,:include => [:events])"Rails语句,这样我只能获得用户的某些事件,而不是所有事件?
谢谢,S
这些方面的东西应该有效:
# 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])
Run Code Online (Sandbox Code Playgroud)
Time.now.tomorrow.midnight很讨厌.1.day.from_now.midnight可能会稍微不那么讨厌,取决于您的偏好;)
据我所知,您不能按照您描述的方式使用 :include 选项。
无论如何,获取所有事件有什么问题吗?无论如何,您都必须加载/加入/查询事件表。但是,如果实例化所有事件,您将需要更多内存。
当然,您可以执行两次查询,一项针对具有“今天”事件的用户,另一项针对没有“今天”事件的用户。
你也可以反过来:
Event.find(:all, :conditions => "...only today...", :include => :user)
Run Code Online (Sandbox Code Playgroud)
这将为您提供今天的所有事件(包括用户)。您可以使用另一个查询来获取所有用户而不包括事件,并在内存中执行其余操作。