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

Повече информация за Как работят методите за асоцииране на релси?

Също така в релсовите коментари на associations/collection_associations.rb

Трябва да внимавате с предположенията относно целта: проксито не извлича записи от базата данни, докато не се нуждае от тях, но нови, създадени с +build+, се добавят към целта. Така че целта може да не е празна и все още да няма деца, чакащи да бъдат прочетени от базата данни. Ако погледнете директно към базата данни, не можете да предположите, че това е цялата колекция, защото може да са добавени нови записи към целта и т.н.

Бърза проверка на моята конзола потвърди, че децата не са заредени.

parent.children << child; nil

=> само родител и дете, когато са заредени....

person charlysisto    schedule 16.01.2013
comment
Хм, може би въпросът ми не беше ясен, защото вече го знам. Моля, вижте последната ми редакция. TYVM. - person d0bz; 16.01.2013
comment
Благодаря, точно това търсех! - person d0bz; 16.01.2013