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验证