我有一个Class Subject
objects = Subject.where('condition')
我想为所有这些对象更新一个属性(例如colour
)。
一种方法是update_all方法:
objects.update_all(colour: 'red')
但这会触发 N
个查询。
我正在尝试更新所有这些对象的属性,然后一起对整个对象进行导入
objects.assign_attributes(colour: 'red')
Subject.import objects
这里的问题是assign_attributes
可以在单个对象上调用,而不能在整个对象集上调用。
是否有一种方法可以实现一条语句,该语句将更新所有objects
的属性而不必显式地遍历它们?
答案 0 :(得分:2)
update_all
构造了一个update subjects where condition set colour='red'
sql查询,这确实是更新多个记录的最快方法,其缺点是它不会更新updated_at
并且不会调用任何回调/验证。
如果您需要验证和回调-那么就无法一一更新(最好使用find_in_batches
或find_each
)。