Rails Associations push (коллекция‹‹)

Вызывает ли перемещение объекта в его родительскую коллекцию загрузку коллекции?

e.g.:

Parent.childs << a_child

Является ли «массив» parent.childs теперь загруженным ВСЕМИ дочерними элементами или только «a_child»? то есть будет ли SQL «выбирать * из дочерних элементов, где parent_id =?» оператор будет выполнен перед добавлением в коллекцию?

РЕДАКТИРОВАТЬ:

http://apidock.com/rails/v3.2.3/ActiveRecord/Associations/CollectionAssociation/concat_records, кажется, вызывает "add_target" ПЕРЕД вызовом "insert_record", который добавляет объект в массив @target...


person d0bz    schedule 16.01.2013    source источник
comment
Вы можете попробовать это в своей консоли Rails (сокращенно rails console или rails c) и посмотреть, какой SQL будет сгенерирован.   -  person MrDanA    schedule 16.01.2013
comment
Кстати, это children   -  person Zepplock    schedule 16.01.2013


Ответы (1)


Нет (слава богу)! Parent.childs является прокси-сервером, и '‹‹' просто инициирует создание/обновление a_child.

Дополнительная информация о Как работают методы ассоциации rails?

Так же в рельсах комментарии ассоциаций/collection_associations.rb

Вы должны быть осторожны с предположениями относительно цели: прокси не извлекает записи из базы данных, пока они не потребуются, но новые, созданные с помощью +build+, добавляются к цели. Таким образом, цель может быть непустой и по-прежнему не иметь дочерних элементов, ожидающих чтения из базы данных. Если вы смотрите непосредственно в базу данных, вы не можете предположить, что это вся коллекция, потому что в цель могли быть добавлены новые записи и т. д.

Быстрая проверка на моей консоли подтвердила, что дети не загружены.

parent.children << child; nil

=> загружаются только родитель и дочерний элемент....

person charlysisto    schedule 16.01.2013
comment
Хм, может быть, мой вопрос был не ясен, потому что я уже знаю это. Пожалуйста, обратитесь к моему последнему редактированию. ТЫВМ. - person d0bz; 16.01.2013
comment
Спасибо, это именно то, что я искал! - person d0bz; 16.01.2013