Rails表单提交竞争条件?

时间:2013-09-11 00:50:54

标签: ruby-on-rails race-condition

我在想是否有多个用户提交表单会导致数据被覆盖。 这是按时间顺序排列的行动:

1. User 1 clicks on Edit, rails render the page that has <form> and has value {A: 1, B: 2}
2. User 2 clicks on Edit, rails render another page that has <form> and has value {A: 1, B: 2}
3. User 1 updates value A to 5 and clicks on Submit, passing to server {A: 5, B: 2}
4. Server updates to database to {A: 5, B: 2}
5. User 2 updates value B to 10 and clicks on Submit, passing to server {A: 1, B: 10}
6. Server updates to database to {A: 1, B: 10}

由于用户2的浏览器具有旧数据。当B点击提交时,字段A过去为1.用户1的更新被覆盖。

如何在rails中解决此问题?

2 个答案:

答案 0 :(得分:1)

如果你使用rails,你应该csrf_meta_tags创建一个唯一的密钥,让你知道表单已经提交,并且每个用户都有所不同

答案 1 :(得分:1)

如果他们要使用相同的记录,除非您查看记录,否则您肯定会因种族而遭受数据丢失。您可能需要检查记录以确保在更新过程中它没有更改。

如果要生成新记录,那么您很可能依赖于数据库为其生成唯一记录和ID /密钥。