실제로 지불 받기 전에 비행기 좌석이 잠겨있는 것과 비슷한 요소를 "예약"하고 싶습니다. 최선의 방법은 데이터베이스를 통해, 그리고 ORM 계층에서 수행하는 것이 가장 좋습니다. 그래도 난 좀 더 유연한 솔루션을 필요로ActiveRecord를 사용하여 특정 시간 동안 행 예약하기
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
UPDATE : 레일이 처음 built-in optimistic locking 기능을 사용하여 시도해야 할 시도하는 사람.
맞아, 나는 누가 그것을했는지 구별하기 위해'locked_by'와 함께'locked_until'을 사용할 수 있습니다. – m33lky
ActiveRecord는 데이터베이스를 사용하여 잠금/트랜잭션을 수행합니다. 그것은 코드에서 올바르게 할 수 있고 다른 데이터베이스/SQL 구현에 대해 걱정할 필요가 없기 때문에 그렇게 좋았습니다. – m33lky
나는 과거에는 너무 유사하지 않은 것들을 수행했고 locked_by/locked_since 열과 함께 2 개의 잠금 열에 대한 업데이트를위한 낙관적 잠금을 사용했습니다. –