gpt4 book ai didi

ruby-on-rails - `update_attribute` 更新了与指定不同的属性

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:49 30 4
gpt4 key购买 nike

我在使用 update_attribute 时遇到问题。我只想更新我指定的属性,但另一个属性是(在我无权访问的不同位置更改的属性)。

这是一个简化的版本:

user = User.find(1)
p user.attributes #=> name: 'something', email: nil
user.name = 'test'
user.update_attribute :email, 'test@test.com'

如果我之后查找对象,我会得到

user2 = User.find(1)
p user2.attributes #=> name: 'test', email: 'test@test.com'

因此,update_attribute 正在更新与我要求的属性不同的属性。为什么?我该如何解决这个问题?

最佳答案

在 Rails 中有两个相关的方法:update_attributeupdate_column

update_attribute ,它的作用是设置属性的值,以及然后在不验证的情况下调用对象的完整保存(但调用回调)。这将导致其他不相关的字段也更新为保存(在本例中为 name 字段)

update_column , 相反,将直接更新数据库中的该字段,忽略任何其他更改到任何其他字段,并忽略验证和回调。

如果您想要更新字段以确保没有其他字段被更新,跳过所有可能的副作用,最好的选择是使用 update_column。相反,如果您想更新一个跳过验证的字段,我会说您最好更新属性并调用 save(validate: false),这样您的意图就很明确了。

关于ruby-on-rails - `update_attribute` 更新了与指定不同的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20932565/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com