Обновление и сохранение поля activerecord в Rails? - PullRequest
1 голос
/ 30 декабря 2011

Существует простой метод:

def get_award(user)
  u = User.find(user).score += 10
  u.save
end

Моя проблема в том, есть ли потенциальное состояние гонки, которое приводит к тому, что пользователь get_award дважды, но получает только 10 очков?Как этого избежать?

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Вам необходимо получить экземпляр 'user', обновить счет и сохранить его. В вашем коде вы сохраняете класс, а не экземпляр объекта:

def get_award(user)
  u = User.find(user).score += 10
  u.save
end
0 голосов
/ 30 декабря 2011

Да, это возможно.

связанные вопросы: Как избежать состояния гонки в моем приложении Rails?

Вы можете использовать два вида блокировки: оптимистичный ипессимистично

http://guides.rubyonrails.org/active_record_querying.html См. пункт № 10

...