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 查询。
我只是想用
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 查询。