# 数据更新方法对比

| 方法                                          | <p>使用默认<br>Accessor?</p> | 持久化对象? | 校验 | 回调 | <p>更新 <br>updated\_at</p> | <p>Readonly <br>检查</p> | <p>单属性<br>多属性</p> |
| ------------------------------------------- | ------------------------ | ------ | -- | -- | :-----------------------: | :--------------------: | ----------------- |
| x=                                          | 是                        | 否      | -  | -  |             -             |            -           | 单                 |
| write\_attribute                            | 否                        | 否      | -  | -  |             -             |            -           | 单                 |
| update\_attribute                           | 是                        | 是      | 否  | 是  |             是             |            是           | 单                 |
| <p>assign\_attributes & <br>attributes=</p> | 是                        | 否      | -  | -  |             -             |            -           | 多                 |
| <p>update & <br>update\_attributes</p>      | 是                        | 是      | 是  | 是  |             是             |            是           | 多                 |
| update\_column                              | 否                        | 是      | 否  | 否  |             否             |            是           | 单                 |
| update\_columns                             | 否                        | 是      | 否  | 否  |             否             |            是           | 多                 |
| User::update                                | 是                        | 是      | 是  | 是  |             是             |            是           | 多                 |
| User::update\_all                           | 否                        | 是      | 否  | 否  |             否             |            否           | 多                 |

x= 表示直接赋值，其它几个是方法名

write\_attribute(:name, ?) 等价于 user\[:name]= ?

User::update 是类方法，直接封装了 User#update 实例方法，效果是一样的。

update & update\_attributes 封装了 assign\_attributes

update\_column 直接封装了 update\_columns

参考

[Different Ways to Set Attributes in ActiveRecord](http://www.davidverhasselt.com/set-attributes-in-activerecord/)
