Из файлов rails 5, как мне кажется, update можно использовать для обновления нескольких объектов (массив записей), но атрибуты update_attributes работают только с отдельными записями, в противном случае оба они одинаковы
Из основных файлов rails для update_attributes:
Обновляет отдельный атрибут и сохраняет запись.Это особенно полезно для логических флагов на существующих записях.Также обратите внимание, что
- Проверка пропущена.
- \ Обратные вызовы вызываются.
- updated_at / updated_on столбец обновляется, если этот столбец доступен.
- Обновляет все атрибуты, которые являются грязными в этом объекте.
Этот метод вызывает ActiveRecord :: ActiveRecordError, если атрибут помечен как только для чтения.
def update_attribute(name, value)
name = name.to_s
verify_readonly_attribute(name)
public_send("#{name}=", value)
save(validate: false)
end
Для обновления
Обновляет объект (или несколько объектов) и сохраняет его в базе данных, если проверки пройдены.Полученный объект возвращается независимо от того, был ли объект успешно сохранен в базе данных или нет.
==== Параметры
- + id + - Это должен быть идентификатор или массив идентификаторов.подлежит обновлению.
- + attribute + - Это должен быть хеш атрибутов или массив хешей.
==== Примеры
# Обновляет одну записьPerson.update (15, user_name: "Samuel", группа: "expert")
# Обновляет несколько записей people = {1 => {"first_name" => "David"}, 2 => {"first_name "=>" Jeremy "}} Person.update (people.keys, people.values)
# Обновляет несколько записей из результата отношения people = Person.where (group:" expert ") people.update (group: "master")
Примечание. При обновлении большого количества записей для каждой записи будет выполняться запрос UPDATE, что может привести к снижению производительности.Когда запуск обратных вызовов не требуется для каждого обновления записи, предпочтительно использовать {update_all} [rdoc-ref: Relation # update_all] для обновления всех записей в одном запросе.
def update(id, attributes)
if id.is_a?(Array)
id.map { |one_id| find(one_id) }.each_with_index { |object, idx|
object.update(attributes[idx])
}
else
if ActiveRecord::Base === id
raise ArgumentError,
"You are passing an instance of ActiveRecord::Base to `update`. " \
"Please pass the id of the object by calling `.id`."
end
object = find(id)
object.update(attributes)
object
end
end