ruby-on-rails - "Rails Way"的 `update` 是否存在根本缺陷?

标签 ruby-on-rails routing crud

我故意以煽动性的方式提出这个问题,因为我担心我遗漏了一些东西。

处理模型更新的 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/

相关文章:

ruby-on-rails - rails : Preserving GET query string parameters in link_to

asp.net-mvc - 路由到名称相同但参数不同的操作

php - 如果未实例化对象,调用静态函数将返回 NULL? PHP面向对象

spring - CrudRepository 不从 schema.sql 读取数据

php - 简单 URL 路由不适用于 CodeIgniter

c# - 在 C# 中使用 Visual Studio 通过 mySQL 将数据插入数据库

jquery - 清除客户端验证 Rails gem 中的错误消息

ruby-on-rails - 使用 Factory Girl 进行测试时处理数据库的正确方法

ruby-on-rails - 如何在 Rails 中有条件地构建 ActiveRecord 查询?

symfony - 如何在 Symfony2 中使路由不区分大小写?