#ruby-on-rails #activerecord
#ruby-on-rails #activerecord
Вопрос:
Будет ли одно из следующих действий более эффективным?
#Array is an array of hashes
Array.each do |a|
#some logic to clean up the record for creation
Model.create!(a)
end
против.
Array.each_with_index do |a,i|
#some logic to clean up the Array for creation
end
Model.create!(Array)
Ответ №1:
Исходя из исходного кода, выполняется проверка, которая выполняет сбор коллекции, а затем рекурсивно вызывает create . В этом случае вы были бы более эффективны с первым методом, поскольку он использует меньше операций и будет выполнять is_a?(Array)
проверку только один раз.
Исходный код:
# File activerecord/lib/active_record/base.rb, line 504
def create(attributes = nil, options = {}, amp;block)
if attributes.is_a?(Array)
attributes.collect { |attr| create(attr, options, amp;block) }
else
object = new(attributes, options)
yield(object) if block_given?
object.save
object
end
end