在Rails 5中,update和update_attributes方法的区别是什么?我看到了这两种方法的如下结果
在更新方法方面,在活动记录关系中引入了一种新的方法。我听不懂。有什么关系?
此外,我们在Rails 5中使用的是update_attributes,在活动记录文档中没有使用它。
我对所有的更新方法都很困惑。我需要澄清
发布于 2019-05-29 23:58:27
从Rails 4.0.2开始,如果更新失败,#update将返回false。在Rails 4.0.2之前,#update返回被更新的对象。因此,主要的区别是返回值。在进行此更改之后,#update_attributes只是#update的别名。在Rails 6中,似乎存在反对#update_attributes的谈判,因为Rails 6尚未发布。
发布于 2018-12-18 13:02:52
从rails 5文件看来,update可以用于更新多个对象(记录数组),但是update_attributes只在单个记录上工作,否则两者是相同的。
来自update_attributes的rails核心文件:
更新单个属性并保存记录。这对于现有记录上的布尔标志特别有用。还请注意
如果属性标记为只读,此方法将引发ActiveRecord::ActiveRecordError。
def update_attribute(name, value)
name = name.to_s
verify_readonly_attribute(name)
public_send("#{name}=", value)
save(validate: false)
end更新
如果验证通过,则更新对象(或多个对象)并将其保存到数据库。不管对象是否成功地保存到数据库中,结果对象都会被返回。
====参数
====实例
更新一个记录Person.update(15,user_name:"Samuel",group:"expert")
更新多条记录people ={1 => { "first_name“=> "David”},2 => { "first_name“=> "Jeremy”}} Person.update(people.keys,people.values)
根据relation = Person.where(group:"expert") people.update(group:“master”)的结果更新多条记录
注意:更新大量记录将对每个记录运行更新查询,这可能会导致性能问题。当每个记录更新不需要运行回调时,最好使用{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发布于 2019-01-29 06:52:17
当我们使用update_column时,时间更新是在数据库级别上完成的,因此没有任何与rails ORM的联系,所以无论我们实现了什么逻辑,比如回调和验证,都将是浪费的,而且不会有用,因为这将被绕过。
https://stackoverflow.com/questions/53830310
复制相似问题