Optimistic Locking pada Rails

Jika terdapat dua user yang berusaha melakukan update record melalui ActiveRecord, misalnya:

user1 = User.find(1)
user2 = User.find(1)

user1.name = "Ardian"
user1.save
# User id 1, name = Ardian

user2.name = "Ardian Bahtiarsyah"
user2.save
# User id 1, name = Ardian Bahtiarsyah

maka bisa dilihat nilai dari User.find(1).name adalah Ardian Bahtiarsyah.

Lalu bagaimana caranya agar ketika suatu record masih dalam proses editing oleh user1 dan user2 tidak dapat melakukan editing pada waktu yang bersamaan? Yaitu dengan menambahkan migration baru:

class AddLockingColumnToUsers < ActiveRecord::Migration[5.1]
   def self.up
      add_column :users, :lock_version, :integer
   end

   def self.down
      remove_column :users, :lock_version
   end
end

Sehingga ketika dua user melakukan editing record user secara bersamaan, maka user yang terakhir submit akan mendapatkan error “telah diedit oleh user1“.

user1 = User.find(1)
user2 = User.find(1)

user1.name = "Ardian"
user1.save # User id 1, name = Ardian

user2.name = "Ardian Bahtiarsyah"
user2.save # Raises an ActiveRecord::StaleObjectError

Proses ini disebut ActiveRecord Optimistic Locking.

Semoga bermanfaat ya. Thank you (:

p.s. Untuk berlangganan posting baru seputar dunia programming, bisa mengisi form email di bawah ini:

 

 




absyah