我想知道为什么当您使用 map.resources 在 Rails 中创建静态路线时,它会生成以下操作: 新建、创建、编辑、更新?只声明一项行动有什么问题吗? 创造更新并做这样的事情?

def create
  unless post?
     @user = User.new
  else
     redirect_to :action => 'index' if user.create(params[:user])
  end
end

所以我们可以有类似的东西

:GET  users/create # to show the form (same as action - new)
:POST users/create # to create a new user

既然 Restful 是基于动词的,这难道不是最好的使用方法吗?

感谢您的关注

有帮助吗?

解决方案

我认为这里有两个相关但不同的问题:公开的 URL 以及它们路由到的控制器方法。由于其中任何一个都可以独立更改,因此我将分别解决它们。另外,请注意,我将稍微宽松且严格地谈论在 Rails 上下文中实现的 REST。

就外部 URL 而言,我认为这有助于区分构成系统 API 的 URL(:GET users/1, :PUT users/1, 等)以及 URL,这些 URL 只是为了方便人们使用网络浏览器而存在(users/new, users/5/edit, , ETC)。API 的作用就是获取资源或以某种方式与资源进行交互 - 这些是另一台计算机在与您的系统交互时将使用的 URL。这些 URL 通常只是您想要与之交互的资源的地址,然后您使用 HTTP 方法和参数来指示您想要执行的操作(GET = 显示此资源,PUT = 更改此资源等) )。方便的 URL 用于显示表单,以便人们更轻松地使用 API。你 可以 通过使用curl 手动输入您想要更改的所有参数并向users/1 发送POST 来编辑用户,但作为一个人,如果您可以只使用表单,那就容易得多。

看看你上面的例子, :GET users/create 可能有道理(并且非常类似于 :GET users/new 这是默认值),但是 :POST users/create 粗略地翻译为“创建一个新的用户/创建”,这不太有意义。

就控制器方法而言,“new”和“create”正在执行根本不同的任务,希望从前面的段落中可以清楚地看出这一点。其中一个是显示表单,另一个是创建新资源。你 可以 当然,重载相同的方法来执行此操作,但如果没有令人信服的理由这样做,创建两个小的独立方法来处理两个小的独立任务可能是更自然的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top