увеличить поле на некоторое число без обновления временных меток - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно обновить 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, пожалуйста, помогите мне.Спасибо

1 Ответ

0 голосов
/ 22 октября 2018

Неважно, нашел решение.Так что, видимо, метод update_counters делает именно то, что мне нужно.

User.update_counters :id,:reputation => 10

Спасибо.

Ссылка: Метод счетчиков обновления рельса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...