我故意以煽动性的方式提出这个问题,因为我担心我遗漏了一些东西。
处理模型更新的 Rails 方式如下:
class UsersController < ApplicationController
...
def update
@current_user = load_user
if @current_user.update_attributes params[:user]
redirect_to success_path
else
render :edit
end
end
end
这一切都很好,除了当表单提交不正确时你最终会得到一个奇怪的 URL:
编辑用户
你发现自己在路上:
users/:user_id/edit
提交未验证的编辑后
即您将需要修复表单中的输入并重新提交:
users/:user_id
提交验证后的编辑
success_path
为什么仅仅因为表单有错误就应该使用不同的 URL?
问题...
你在做同样的事情,但你现在在不同的 URL 上。这有点奇怪。
其实坦白说感觉不对。您所在的表单未正确验证,因此已重新加载。你应该还在
/users/:user_id/edit
.如果你做过 JS 验证,你会的。此外,如果您的导航中有任何“当前选择”逻辑,那么您实际上在视觉上处于错误的位置,因为不再突出显示正确的导航项目 - 看起来您在用户个人资料页面上。
最佳答案
Why the hell should you be on a different URL just because the form has errors?
因为当你第一次去的时候:
users/:user_id/edit
...您正在请求 GET。
然后你发布到:
users/:user_id
因此,通过发送表单帖子,您请求了不同的资源路由,并且根据定义具有不同的 URL。
框架不关心在处理您的请求时后台发生了什么 - 它只知道它是一个 POST(按照惯例,它不一定像 GET 那样具有幂等性)
关于ruby-on-rails - "Rails Way"的 `update` 是否存在根本缺陷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280834/