Мне нужно обновить reputation
атрибут User
модели после того, как он создаст Post
.Вот что я попробовал до сих пор:
Простое решение:
User.find(id).increment!(reputation: 10)
Но это также обновляет поле updated_at
.
Я искал способ обновить счетчик без обновления временных меток и обнаружил следующее:
User.increment_counter(:reputation, id)
Но этот метод увеличивает reputation
на 1.
Я также, обнаружил, что метод update_column
не обновляет метки времени.Но я не могу использовать его как однострочный запрос.
Так же, я должен обновить репутацию пользователя после того, как он создаст сообщение.Итак, в моей Post
модели,
after_create_commit { self.user.update_column(reputation: (self.user.reputation + 10))}
Этот запрос вызывает self.user
(чтобы получить ассоциированного пользователя текущего сообщения) 2 раза, как мне этого избежать.
ИЛИ
Есть ли другой способ увеличения без обновления меток времени.
Спасибо
Обновление:
Найдено одно решение, update_counters
метод (добавлен в ответах ниже).
Если кто-то знает о каком-либо другом методе или может помочь мне с тем, как я могу использовать update_column без двухкратного вызова self.user
, пожалуйста, помогите мне.Спасибо