2013-03-20 2 views
0

У меня есть коллекция AR-объектов в цикле, которые, вероятно, будут выполняться много раз, поэтому я хочу очистить коллекцию в конце каждой итерации.Каков наиболее эффективный способ очистки коллекции объектов ActiveRecord?

Каков наиболее эффективный способ сделать это?

Edit 1

Вот пример того, что происходит, когда я использую .clear:

1.9.3p392 :039 > t = w.tags 
=> [#<Tag id: 32451, name: "c++", num_questions: 180854, created_at: "2013-02-25 07:55:55", updated_at: "2013-02-25 07:55:55">, #<Tag id: 32452, name: "performance", num_questions: 28543, created_at: "2013-02-25 07:55:55", updated_at: "2013-02-25 07:55:55">, #<Tag id: 32453, name: "optimization", num_questions: 10021, created_at: "2013-02-25 07:55:55", updated_at: "2013-02-25 07:55:55">, #<Tag id: 32454, name: "language-agnostic", num_questions: 5942, created_at: "2013-02-25 07:55:55", updated_at: "2013-02-25 07:55:55">, #<Tag id: 32455, name: "branch-prediction", num_questions: 28, created_at: "2013-02-25 07:55:55", updated_at: "2013-02-25 07:55:55">, #<Tag id: 32456, name: "books", num_questions: 2667, created_at: "2013-02-25 07:55:59", updated_at: "2013-02-25 07:55:59">, #<Tag id: 32457, name: "ebook", num_questions: 263, created_at: "2013-02-25 07:55:59", updated_at: "2013-02-25 07:55:59">, #<Tag id: 32458, name: "creative-commons", num_questions: 62, created_at: "2013-02-25 07:55:59", updated_at: "2013-02-25 07:55:59">, #<Tag id: 32459, name: "json", num_questions: 39746, created_at: "2013-02-25 07:56:03", updated_at: "2013-02-25 07:56:03">, #<Tag id: 32460, name: "content-type", num_questions: 874, created_at: "2013-02-25 07:56:03", updated_at: "2013-02-25 07:56:03">] 
1.9.3p392 :040 > t.clear 
    (19.0ms) BEGIN 
    (85.2ms) DELETE FROM "questions_tags" WHERE "questions_tags"."question_id" = 10053 AND "questions_tags"."tag_id" IN (32451, 32452, 32453, 32454, 32455, 32456, 32457, 32458, 32459, 32460) 
    (36.5ms) COMMIT 
=> [] 
1.9.3p392 :041 > t 
=> [] 
1.9.3p392 :042 > t 
=> [] 
1.9.3p392 :043 > w.tags 
=> [] 

ответ

3

The builtin method:

your_array.clear 
+0

является то, что лучше, чем просто делать немогу = [] '? Почему или почему нет? На самом деле ... просто попробовал это, и кажется, что он фактически удаляет запись в БД - не записи в массиве ... это не то, что я хотел сделать. – marcamillion

+0

лучше: вы освобождаете память и выполняете резервную работу GC – apneadiving

+0

Удаляет ли записи из БД ожидаемое поведение? Для чего это стоит, я использую Rails. – marcamillion

0

Пожалуйста, обратите внимание на Rails doc on associations. Метод clear не является Array#clear, он перегружен Rails.

Я бы просто скопировать элементы в ассоциации, это будет гарантировать, что ассоциация будет ленивым грузу, что-то вроде:

tags = w.tags.collect{|t| t} 
tags.clear 
Смежные вопросы