我已经使用脚手架生成了一个简单的Rails应用程序。在用户模型中,我添加了对名称存在的验证。我正在使用debug(@ user.object_id),并显示在edit.html.erb中用户编辑页面的顶部
我故意将名称留空,并尝试提交表单。会出现通常的错误,但是每次我提交表单时,@ user的对象ID都会更改。有人可以解释一下object_id为何更改吗?我的假设是@user仍然是同一对象(因为我们位于同一页面,因此仅添加错误并在更新失败时重新呈现edit.html.erb)
答案 0 :(得分:1)
不,您的假设不正确。 HTTP调用是无状态的,这意味着状态不会在调用之间持续存在(即,每个调用彼此独立)。每次提交表单时,都会创建一个新对象并将其分配给变量@user
。由于在每次调用期间都会创建一个新的(且不同的)对象,因此它们的object_id
会有所不同。
答案 1 :(得分:1)
您可能对以下事实感到困惑,即render :edit
方法中的update
仅呈现edit
模板,但不重定向到edit
页面-正确
但是,实际上这是您所遇到的情况:
edit
页面,在@user
的{{1}}方法中分配了edit
UsersController
操作,发现在update
方法中分配了@user
并呈现update
模板因此,在提交表单时会调用其他方法,并且状态会改变