I have been trying to eager load associations based on some scope in
my rails3 app, but could not find any solution.

My app has following models:

    class Project
     has_many :entries
     has_many :to_dos

    class ToDo
     has_may :entries
     has_many :tasks
     belongs_to :project

    class Task
     has_many :entries
     belongs_to :to_do

    class Entry
    belongs_to :project
    belongs_to :to_do
    belongs_to :task

    # options format:
{:from_date=>(Date.today-1.week), :to_date=>(Date.today
+1.week), :user_id=>60}
    scope :filtered_list, lambda { |options|
      condition = options[:user_id].nil? ? "true" : "user_id =
#{options[:user_id]}"
      condition += options[:from_date].nil? ? "" : " AND entry_date >=
'#{options[:from_date]}'"
      condition += options[:to_date].nil? ? "" : " AND entry_date <=
'#{options[:to_date]}'"
      where(condition)
    }

And in projects#index i have following code to get all projects of an
user:

    @projects = current_user.projects.includes(:entries, :to_dos
=>[:entries, :tasks => :entries])

It fetches all projects of the user, along with eager loading the
associations. So when i perform following loop to get all the entries
within the project, no new query gets fired.

    def all_entries(options)
      entries = self.entries
      self.to_dos.each do |d|
        entries += d.entries
        d.tasks.each do |t|
          entries += t.entries
        end
      end
    end

As this eager loading fetches all entries, it is way too much data
than what I actually needed. So I tried to apply some conditions to
the entries eager loaded, but could not find any solution. I was
looking for something like:

    @projects =
current_user.projects.includes(:entries.filtered_list(options), :to_dos
=>[:entries.filtered_list(options), :tasks
=> :entries.filtered_list(options)])

So that only the entries satisfying some conditions get loaded.

Can't we use scoping with eager loading?
Please help me out use eagerloading alongside scoping.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to