有两个用户可都以更新数据库中的同一条纪录,如果两个人同时打开编辑页面,此时只有一个人录入的数据可以被更新。其他更新将被忽略但另个一个用户并不知道。如何通知一个用户,此记录已经被其他用户正在更新中? 我一开始做法是在数据库中增加一个字段,记录有用户使用它,当用户提交后在更改这个字段告诉其他用户,他已经完成更改。但这个有很大的不便,如果用户没有正确操作,此记录状态一直是被用户占用。所以其他用户也不能更新。
我想用 js 但 js 不熟悉。
http://guides.rubyonrails.org/active_record_querying.html#locking-records-for-update 好像没什么靠谱的好办法。。
乐观锁
数据库行级锁都没用,
不知道再弄一个履历表来记录数据能不能实现你这需求
1)本表、履历表同时记录相同内容 2)A 用户更新本表的时候同时更新履历表 3)B 用户更新本表的时候发现该记录跟履历表的内容不一样,提示该记录已被人更新过了
乐观锁如果版本不一致,抛出一个异常,后台处理一下异常,比较两个版本的差异来决定是否更新修改后的内容
同意@Ddl1st 用乐观锁
乐观锁?没听过。我学习下!
同意 #4 楼 @Ddl1st 每次有人更新时记录一个版本号,更新保存时判断这个版本号是不是发生变化,发生变化则抛出异常。
已经解决,我用 rails 时间戳校验,时间发生变化推出! 但是有个问题 rails 在数据库中记录的时间和我的时间不是一个时区,这个时区在那里改啊? #7 楼 @zlx_star #5 楼 @kenshin54 #3 楼 @ywjno
#8 楼 @topswim http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html#method-i-utc