gpt4 book ai didi

ruby-on-rails - rails - 实现一个简单的锁来防止用户同时编辑相同的数据

转载 作者:行者123 更新时间:2023-12-04 23:33:26 24 4
gpt4 key购买 nike

我有一个应用程序,我需要防止用户在其他用户编辑数据时对其进行编辑。我正在努力想出最好的方法,并想征求意见。到目前为止,我已经创建了一个设置模型,它以键/值对的形式在数据库上存储应用程序范围的配置。因此,对于锁,我有一个名为 LOCKED_TABLE_UID 的设置实例,它存储了编辑表的用户的 user_id,如果表空闲,则存储为 null (nil)。

>> lock = Setting.find_by_key('LOCKED_TABLE_UID')

然后,我在我的应用程序 Controller 中实现了 2 个方法来获取和释放锁:
# current_user returns the user currently logged in
def acquire_lock
lock = Setting.find_by_key("LOCKED_TABLE_UID")
if lock.value
# if lock taken, see if it's the current_user or someone else
if lock.value.to_i == current_user.id.to_i
return true
else
return false
end
else
# lock is free, assign it to this user
lock.value = current_user.id
return true if lock.save
end
end

def release_lock
lock = Setting.find_by_key("LOCKED_TABLE_UID")
if lock.value
# the lock belongs to current_user, so he can release it
if lock.value.to_i == current_user.id.to_i
lock.value = nil
return true if lock.save
else
# not your lock, go away
return false
end
else
# lock is free, quit bugging
return true
end
end

我想要的是创建某种包含锁定机制的块代码,如下所示:
def some_crud_action
requires_locking do |lock|
if lock
# do some CRUD stuff here
else
# decline CRUD and give some error
end
end
end

我很感激这方面的帮助 - 但我也愿意接受关于如何完成所有这些的其他建议,或者我可能忽略的一些事情。这个锁不一定是原子的,但相当基本和最重要的 - 它可以工作:)
谢谢。

最佳答案

你见过 ActiveRecord 内置的锁定功能吗?

  • Optimistic Locking
  • Pessimistic Locking
  • 关于ruby-on-rails - rails - 实现一个简单的锁来防止用户同时编辑相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803574/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com