当前位置:  开发笔记 > 程序员 > 正文

Rails new vs create

如何解决《Railsnewvscreate》经验,为你挑选了4个好方法。

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

谷歌搜索没有提供我正在寻找的答案.我理解其中的差异,但需要知道它们的使用方式.



1> Steve Weet..:

在Rails的REST实现中,newcreate的处理方式不同.

HTTP GET /resources/new用于呈现适合于创建新资源的表单,它通过调用控制器中的操作来执行,该操作创建新的未保存记录并呈现表单.

一个HTTP POST,用于/resources获取作为操作的一部分创建的记录,并将其传递给控制器中的create操作,然后控制器尝试将其保存到数据库中.



2> Justin Ethie..:

从ActiveRecord :: Base文档:

create(attributes = nil){| object | ...}

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

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

可以将新对象实例化为空(传递无构造参数)或使用属性预先设置但尚未保存(传递具有与关联表列名匹配的键名称的哈希).在这两种情况下,有效的属性键由关联表的列名确定 - 因此您不能拥有不属于表列的属性.

因此,create实例化新对象,验证它,然后将其保存到数据库.并且new只创建本地对象,但不会尝试验证或将其保存到DB.


@Karpie - 感谢您的downvote.你提出了一个很好的观点,但考虑到很多人发现这个答案很有用,特别是因为标题或标签都没有把它称为仅限控制器的问题.所以我认为这个答案提供了同样的价值.
这个问题是关于控制器方法,而不是模型方法.

3> ghoppe..:

New实例化一个新的Model实例,但在调用save方法之前不会保存它.

Create与new相同,但也将其保存到数据库中.

有时您希望在将某些内容保存到数据库之前执行操作,有时您只是想立即创建并保存它.



4> Jared..:

Rails的RESTful部分与HTTP协议的工作方式非常接近.在HTTP协议中,GET请求不应该修改任何数据.从逻辑上讲,如果您查看Rails中所有RESTful操作的工作方式,它们将与HTTP操作相匹配.POST用于生成新数据,因此它在逻辑上是创建的.您使用GET来提供表单版本或换句话说,即新操作.索引和显示也是GET,更新是PUT(或Rails 4+中的PATCH),而destroy是HTTP中的DELETE.

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

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有