我故意以煽动性的方式提出这个问题,因为我担心自己会遗漏某些东西。
用于处理模型更新的 Rails Way 如下:
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
为什么你因为表单有错误而应该使用其他网址?
问题......
您正在做同样的事情,但现在您使用的是其他网址。这有点奇怪。
事实上坦率地说,这感觉不对。您正在使用未正确验证的表单,因此已重新加载。你应该还在/users/:user_id/edit
。如果你已经完成了JS验证,那就是。
此外,如果你的导航中有任何“当前选择”的逻辑,那么你实际上在视觉上是错误的,因为正确的导航项目不再突出显示 - 它看起来像你在用户个人资料页。
答案 0 :(得分:6)
为什么你应该只是因为表格而在不同的URL上 有错误吗?
因为当你第一次去:
users/:user_id/edit
......你要求获得GET。
然后你发帖到:
users/:user_id
因此,通过发送表单帖子,您已经请求了不同的资源路由,并且根据定义具有不同的URL。
框架并不关心你的请求处理过程中后台发生了什么 - 它只知道它是一个POST(根据惯例,它不一定是幂等的GET)
答案 1 :(得分:0)
实际上它不是“Rails Way”,而是“REST Way”。维基百科:Representational state transfer
如果您遵守这些规则,您将免费获得符合REST标准的Web服务。据我所知,路径“resource / id / edit”特定于html文档。 Web服务客户端不需要表单进行编辑。
所以这些人都试图保持一致。如果您不需要Web服务兼容性,则可以更改路由。