【发布时间】:2021-09-29 04:52:03
【问题描述】:
我觉得我在许多 Rails 应用程序中都看到过这种情况,但对我来说从来没有意义(但也许那是因为已经过了午夜,我的大脑一片混乱)。
当我编辑(例如)/admin/users/20/edit 的用户时,我收到验证错误,控制器代码如下所示:
def update
if @user.update(user_params)
redirect_to(some_path, notice: 'Record updated')
else
render("edit") # <<<<<<<<<<<<<<<<<<<
end
end
它没有转到/admin/users/20/edit,而是在浏览器中显示/admin/users/20。
这看起来一切都很好,但是没有/edit,它不是一个有效的 GET URI,所以其他使用 HTTP_REFERER 的代码,并且(自然)期望它是一个有效的 GET URI 将把用户带到错误页面。
在我的例子中,有一个内部 gem 可以处理管理员用户对用户的模拟。结束模拟会将管理员用户带回引用者,如果他们通过验证错误修改了引用者,则会收到错误。
我可以
- 修改 gem 来处理这种情况(麻烦,但可能是必要的)
- 添加一个路由以使此 URL 在没有
/edit的情况下有效编辑(似乎没有必要,而且似乎有点笨拙),
但我想知道发生这种情况是否有原因。这实际上是标准的 Rails 行为还是我忽略了什么?如果这是标准的,是否有一个很好的被广泛接受的解决方案?如果不是标准的 Rails 行为,我应该在哪里寻找罪魁祸首?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-6