Я хотел бы иметь возможность "зарезервировать" элемент, аналогичный тому, как сиденье самолета заблокировано на короткий период времени, прежде чем оно фактически будет оплачено. Я думаю, что лучший способ это сделать через базу данных и желательно на уровне ORM.
Вот пример:
ActiveRecord::Base.transaction do
bar = Bar.find(1, :lock => true)
# do my stuff
end
Мне нужно более гибкое решение.
Вот как я представляю себе концептуальную работу:
# action1:
# put an expiring lock (30s) on an element (don't block unrelated code)
# other code
# action2 (after payment):
# come back to the locked element to claim ownership of it
ОБНОВЛЕНИЕ : Любой, кто пытается сделать это в Rails, должен сначала попробовать использовать встроенную оптимистическую блокировку .