Ответ 1
Tag.increment_counter :popularity, id
Это не только пропускает выделение, но и увеличивается атомарно.
У меня есть идентификатор записи, который popularity
должен быть увеличен на единицу.
Простое решение выглядит так:
Tag.find(id).increment!(:popularity)
Однако он не кажется очень эффективным, потому что я выбираю всю запись (*) из базы данных (даже несмотря на то, что мне это совсем не нужно), а затем выполняет второй запрос для ее обновления.
Есть ли более эффективный способ сделать это? Я думаю, что одного оператора обновления (без "select" ) должно быть достаточно, но как это записать?
Tag.increment_counter :popularity, id
Это не только пропускает выделение, но и увеличивается атомарно.
Может быть что-то вроде:
Tag.update_all("popularity = popularity + 1", {:id => id})
или
Tag.where(:id => id).update_all("popularity = popularity + 1")
?