ruby on rails активные вопросы по сборке мусора (ruby 1.8.7 и rails 2.3.5) - PullRequest
1 голос
/ 02 сентября 2011

У меня есть следующие объекты: бренд, scoring_records. Бренд имеет множество выигрышных записей.

Если у меня есть блок, где я работаю над таким брендом:

 brands.each{|brand|

     # do some stuff
     brand.do_some_stuff

     some_scoring_records = ScoringRecords.find(:all,:conditions => ["computed_date = ?",today], :order => 'brand.id' )

    #  do some more stuff
    brand.do_some_more_stuff(brand)

    brand.do_even_more_stuff(brand)
 }

вопрос 1: Когда я загружаю scoring_records, как это, он связывает его с брендом автоматически в рельсах (или он ждет, пока отношения не будут выполнены. Я называю brand.scoring_records, будет ли он вызывать базу данных? Или имеет право на сборку мусора? из scoring_records. Есть ли способ загрузить их без ассоциации?

вопрос 2: Если записи не будут gc'd, есть ли в любом случае право на scoring_records, чтобы иметь право на gc, но сохранить бренд вокруг и остальные его отношения? Я не хочу удалять scoring_records, я просто хочу удалить их из памяти.

1 Ответ

1 голос
/ 05 сентября 2011

Вопрос 1: scoring_records - это локальная переменная, которая недоступна в do_some_more_stuff.Scoring_records, который добавляется has_many, не является переменной, это метод, и вы не можете назначить его.Вы должны прочитать о переменных областях.Это хорошее начало: http://www.techotopia.com/index.php/Ruby_Variable_Scope. Переменная scoring_record в предоставленном вами коде не влияет на scoring_records в переменной бренда.

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

Вопрос 2: scoring_records не связан с брендом, его область действия - блок.

...