self.column = 要更新的值在 Rails 中是否已弃用?

Has self.column = value to update been deprecated in Rails?

我只是想用

self.name = 'Tom'

在我的用户模型中,但该列没有更新。

正在使用

self.update_column(:name, 'Tom')

update_column(:name, 'Tom')

有效。

是否已弃用第一种更改值的方法?

self是一个对象,当你做self.name = 'Tom'时,它只是在对象级别设置属性的新值,但要将它保存在数据库中,你需要调用save 方法 self 设置值后。

self.name = 'Tom'
self.save!

试试吧!

self.name = 'Tom'

调用 ActiveRecord 从您的列生成的 setter 方法 name=。这只会更新内存中的对象并将属性标记为已更改,因此当您调用 .save.save! 时,更改将保存到数据库中。

Has the first way of changing value been deprecated?

没有。你完全误解了它的作用。使用 setters 从未自动导致数据库更新。那将是真正出乎意料的行为。

self.update_column(:name, 'Tom')update_column(:name, 'Tom') 实际上是一回事。第一个只有一个明确的接收者,而后者是隐含的。但在这两种情况下,收件人都是 self。就像它的老大哥 #update 方法一样,它创建了一个 UPDATE sql 查询。