Ruby on Rails - Add condition on ':include =>' to load limited number of objects

前端 未结 2 1722
南旧
南旧 2021-01-18 14:41

I have two models User and Event. The cardinality is one User has many Events. When I query the database to give me all the users and their corresponding events it returns t

相关标签:
2条回答
  • 2021-01-18 15:23

    Something along these lines should work:

    # 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 is pretty nasty. 1.day.from_now.midnight may be slightly less nasty, depending on your preference ;)

    0 讨论(0)
  • 2021-01-18 15:26

    To my knowledge, you can't use the :include option in the way you describe.

    What is your problem with getting all the events anyway? You will have to load/join/query the events table anyway. You will need more memory, though, if you instanciate all events.

    Of course you could do two queries, one for the users with the events "today", and one for those without.

    You could also go the other way round:

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

    Which would give you all events for today with users included. You can use another query to get all users without including the events, and do the rest in memory.

    0 讨论(0)
提交回复
热议问题