例如我有個 Account model 內有 balance column,可以這樣做:
```ruby
def increment_balance(amount)
self.class.connection.execute "update accounts set balance = balance + #{amount} where id = #{id}"
add_to_transaction # so after_commit will be triggered
self
end
```
這樣就算我有兩個 account instance 同時存入也沒關係,因為他增加的值是從 database 的值去加的,如果是用
```ruby
account.update(amount: new_amount)
```
這種作法的話就會變成直接 update 成新的值,就可能會有 race condition 的問題
沒有留言:
張貼留言