Rails新vs创build

为什么需要在RESTful控制器中定义一个新方法,并使用create方法进行跟踪?

谷歌search没有提供我正在寻找的答案。 我了解其中的差异,但需要知道为什么他们是这样使用的。

在Rails的REST实现中, 新build创build的处理方式不同。

HTTP GET to /resources/new旨在呈现适合于创build新资源的表单,通过调用控制器内的操作来创build新资源,从而创build新的未保存的logging并呈现表单。

/resources的HTTP POST将创build的logging作为操作的一部分,并将其传递给控制器​​中的创build操作,然后尝试将其保存到数据库。

从ActiveRecord :: Base文档:

创build(attributes = nil){| object | …}

如果validation通过,则创build一个对象(或多个对象)并将其保存到数据库。 无论对象是否成功保存到数据库,都会返回结果对象。

new(attributes = nil){| self if block_given?| …}

新对象可以实例化为空(不传递任何构造参数),也可以使用属性预先设置,但尚未保存(传递带有与关联的表列名匹配的键名的哈希)。 在这两种情况下,有效的属性键都由关联表的列名确定 – 因此不能有不属于表列的属性。

因此, create实例化新对象,validation它,然后将其保存到数据库。 new只创build本地对象,但不会尝试validation或保存到数据库。

新实例化一个新的Model实例,但直到调用save方法时才保存。

创build与新build一样,但也将其保存到数据库。

有时候你想在把某些东西保存到数据库之前做些什么,有时候你只是想创build并保存它。

Rails的RESTful部分与HTTP协议的工作方式非常接近。 在HTTP协议中,GET请求不应该修改任何数据。 从逻辑上讲,如果你看看Rails中所有的RESTful动作的工作方式,他们将匹配HTTP动作。 POST是为了生成新的数据,所以在逻辑上创build。 您使用GET来提供该表单的版本,换句话说,新的动作。 索引和显示也是GETs,update是一个PUT(或者Rails 4+中的PATCH),而destroy则是一个HTTP中的DELETE。

此外,它很好地分离了控制器中的逻辑,并为您提供了一种平滑的方式来处理错误(通过用错误消息重新呈现新的操作)。