Я хотел бы уточнить что-то об ActiveRecord. У меня такой сценарий:Условия гонки ActiveRecord в действиях
class Purchase < ActiveRecord::Base
belongs_to :song
end
class Song < ActiveRecord::Base
has_many :purchases
validate :cannot_update_if_being_sold
def cannot_update_if_being_sold
errors.add(:song, "Cannot update beats while beat is being sold.") if !self.purchases.empty?
end
end
Теперь можно сказать, что у меня есть существующий экземпляр песни, и я пытаюсь его обновить. Здесь нет гонки? В частности:
- Run песня валидация, все проходит
- Создать покупку для песни и сохранить в БД
- Сохранить песню DB
Как я могу предотвратить это? Я не уверен, как использовать блокировки в этом сценарии, поскольку покупки - has_many.
Спасибо!
Что такое «состояние гонки»? – MrYoshiji
«Состояние гонки» - это обстоятельство, при котором два процесса происходят отдельно, и вы получаете непредсказуемые результаты, потому что вы не знаете, какой из них произойдет первым. Я не думаю, что это пример условий гонки. –
Не может ли покупка этой песни произойти после прохождения валидации песни и до того, как песня действительно будет обновлена в БД? В частности, значение self.purchases может измениться после его вызова в проверке проверки. Правильно? – deruse