Answers:
从ActiveRecord :: Base文档中:
create(attributes = nil){| object | ...}
如果验证通过,则创建一个(或多个)对象并将其保存到数据库。无论对象是否成功保存到数据库,都将返回结果对象。
new(attributes = nil){|如果block_given给定,则为自身?| ...}
可以将新对象实例化为空(不传递任何构造参数),也可以将其实例化为具有属性的预置,但尚未保存(传递键名称与关联的表列名称匹配的哈希值)。在这两种情况下,有效的属性键均由关联表的列名确定-因此,您不能拥有不属于表列的属性。
因此,create
实例化新对象,对其进行验证,然后将其保存到数据库中。并且new
仅创建本地对象,而不尝试验证或将其保存到数据库。
New实例化一个新的Model实例,但是直到调用save方法时它才被保存。
Create与new一样,但也将其保存到数据库中。
有时您想要在将某些内容保存到数据库之前先做一些事情,有时您只是想立即创建并保存它。
Rails的RESTful部分非常接近HTTP协议的工作方式。在HTTP协议中,不应要求GET请求修改任何数据。从逻辑上讲,如果您查看Rails中所有RESTful动作的工作方式,它们将与HTTP动作匹配。POST用于生成新数据,因此在逻辑上是创建的。您可以使用GET来提供该表单的版本,也就是新动作。索引和显示也是GET,更新是PUT(在Rails 4+中是PATCH),而销毁是HTTP中的DELETE。
此外,它很好地分离了控制器中的逻辑,并为您提供了一种处理错误的流畅方法(通过使用错误消息重新呈现新操作)。
"You use a GET to serve the form version of that or in other words, the new action"
感谢您的回答,但就我个人而言,这种命名约定确实令人困惑