Sim*_*mon 2 ruby activerecord ruby-on-rails ruby-on-rails-4
以下命中数据库两次 - 如何将其减少为单个查询?
@user = User.find(123)
@user.update_column(:views, @user.views + 1)
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
User.find(123).update_column(:views, self.views + 1)
Run Code Online (Sandbox Code Playgroud)
User.where(id: 123).update_all('views = views + 1')
Run Code Online (Sandbox Code Playgroud)
它将产生以下查询:
UPDATE users SET views = views + 1 WHERE users.id = 123
Run Code Online (Sandbox Code Playgroud)
Rails 有一个专用方法increment_counter将数字字段加一:
User.increment_counter(:views, 123)
# UPDATE `users` SET `views` = COALESCE(`views`, 0) + 1 WHERE `users`.`id` = 123
Run Code Online (Sandbox Code Playgroud)
COALESCE(`views`, 0)确保它也适用于NULL.