Answers:
有几个区别,但差异不大:
.create
相当于.new
接着.save
。这只是更简洁。.create!
等于.new
后跟.save!
(如果保存失败,将引发错误)。也只是短一点.build
是主要的别名.new
。它在Rails 3中以一种方式工作,在Rails <3.x中以另一种方式工作。但是,最重要的部分是可以通过关联(has_many
等)调用这些方法以自动链接两个模型。
尽管create
调用正确,new
然后save
两个选择的返回值之间却有很大差异。
Save
返回true
或false
取决于对象是否已成功保存到数据库。然后可以按照上述问题的第一个示例将其用于流量控制。
Create
无论对象是否被保存,都会返回模型。这对上面的代码有影响,因为if
即使对象未通过验证且未保存,该语句的顶部分支也将始终执行。
如果create
与分支逻辑一起使用,则存在静默失败的风险,而使用new
+ 则不会save
。
create!
不会遇到引发的相同问题,并且如果记录无效,则不会出现异常。
在create
其中替代可以在控制器有用respond_with
用于API(JSON / XML)应答。在这种情况下,对象上存在错误将导致错误在状态为的响应中返回unprocessable_entity
,而这恰恰是您要从API获得的。
我将始终对HTML 使用new
+ save
选项,尤其是如果您依赖流控制的返回值。
我将上述答案列为第二。另外create
,一个人不能false
作为你可以用的参数来传递save
。false
作为参数传递将跳过所有Rails验证