Жажда загрузки с определением области видимости в rails3

Я пытался получить ассоциации загрузки на основе некоторой области в моем приложении rails3, но не смог найти никакого решения.

В моем приложении есть следующие модели:

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)
}

И в проектах # index у меня есть следующий код для получения всех проектов пользователя:

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

Он извлекает все проекты пользователя вместе с активной загрузкой ассоциаций. Поэтому, когда я выполняю следующий цикл, чтобы получить все записи в проекте, новый запрос не запускается.

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

Поскольку эта нетерпеливая загрузка извлекает все записи, это слишком много данных, чем то, что мне действительно нужно. Поэтому я попытался применить некоторые условия к загруженным записям, но не смог найти никакого решения. Я искал что-то вроде:

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

Так что загружаются только записи, удовлетворяющие некоторым условиям.

Нельзя ли использовать область видимости с активной загрузкой? Пожалуйста, помогите мне использовать eagerloading наряду с scoping.

7
задан jayandra 18 July 2011 в 05:11
поделиться