Ruby on rails 为什么在rails控制器中验证失败后对象id会更改?
我已经使用脚手架生成了一个简单的rails应用程序。在用户模型中,我为name的存在添加了一个验证。我正在使用debug(@user.object_id)并显示在edit.html.erb中我的用户编辑页面顶部Ruby on rails 为什么在rails控制器中验证失败后对象id会更改?,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我已经使用脚手架生成了一个简单的rails应用程序。在用户模型中,我为name的存在添加了一个验证。我正在使用debug(@user.object_id)并显示在edit.html.erb中我的用户编辑页面顶部 我故意把名字留空,并试图提交表格。通常会出现错误,但每次提交表单时,@user的对象id都会更改。有人能解释一下为什么对象id在变化吗?我的假设是@user仍然是同一个对象(因为我们在同一个页面中,只是添加了错误并在更新失败时重新呈现edit.html.erb)不,您的假设是不正确的。H
我故意把名字留空,并试图提交表格。通常会出现错误,但每次提交表单时,@user的对象id都会更改。有人能解释一下为什么对象id在变化吗?我的假设是@user仍然是同一个对象(因为我们在同一个页面中,只是添加了错误并在更新失败时重新呈现edit.html.erb)不,您的假设是不正确的。HTTP调用是无状态的,这意味着调用之间的状态不会持久(即每个调用彼此独立)。每次提交表单时,都会创建一个新对象并将其分配给变量
@user
。由于在每次调用期间都会创建一个新的(不同的)对象,因此它们的对象id将不同。您可能会被以下事实弄糊涂:update
方法中的render:edit
只会呈现edit
模板,而不会重定向到edit
页面-没错
但是,实际上,在您的场景中会发生这样的情况:
编辑
页面被访问,用户控制器
- 提交表单时,调用并找到
更新
操作@用户
在更新
方法中分配,并呈现编辑
模板
因此,在提交表单时会调用不同的方法,并且状态会发生变化您已经成为会员7年了,但今天刚刚问了您的第一个问题?!?迷人的!您能包括导致问题的代码吗?理想情况下,我们应该在受影响的代码路径中看到任何代码,而不是您验证过的没有导致问题的代码。感谢您的逐步解释