Я хочу откатить транзакции внутри with_lock
при совпадении условий. Я попробовал raise ActiveRecord::Rollback
, но это не сработало, и записи все еще создаются. Вот краткая версия моего кода.
object.with_lock do
a = num
for i in [1..10] do
unless obj1.tickets.create(params)
raise ActiveRecord::Rollback
end
a += 1
end
unless obj2.update_attributes(a: a) ## I tried 'if' in place of 'unless' for test
raise ActiveRecord::Rollback
end
end
EDIT1
Это то, что у меня сработало
object.with_lock do
ActiveRecord::Base.transaction(requires_new: true) do
a = num
for i in [1..10] do
unless obj1.tickets.create(params)
raise ActiveRecord::Rollback
end
a += 1
end
unless obj2.update_attributes(a: a)
raise ActiveRecord::Rollback
end
end
end