Как заставить ActiveRecord выполнить SQL для загрузки ассоциации, когда родительский объект модели еще не сохранен? - PullRequest
0 голосов
/ 15 декабря 2011

Я делаю вещи нестандартным способом.Я назначаю IDS при создании объекта.

Итак, во время обратных вызовов before_save, которые обращаются к коллекциям дочерних ассоциаций родительской модели, у меня возникает эта проблема, когда ActiveRecord фактически не выполняет SQL для поиска дочерней ассоциации.

Я могу получить связанные объекты, выполнив поиск по их классу, как показано ниже, но есть ли способ заставить методы ассоциации коллекции фактически выполнить запрос и извлечь дочерние элементы, когда сам родитель не былсохранено еще?

class Project < ActiveRecord::Base
  has_many :tasks
end

class Task < ActiveRecord::Base
  belongs_to :project
end

3.times do
  Task.create(:project_id => 1)
end

Tasks.where(:project_id => 1).count
# 3

tasks = Tasks.where(:project_id => 1)
# SELECT * FROM tasks WHERE project_id = 1;

p = Project.new(:id => 1)
p.tasks # nil
# no SQL query executed

1 Ответ

0 голосов
/ 15 декабря 2011

SQL не выполнен, потому что вы еще не сохранили запись проекта. Попробуйте изменить Project.new (: id => 1) на Project.create! (: Id => 1), а затем запросить ваши задачи.

Другими словами, ваш проект не существует, так зачем ему искать задачи под ним?

...