.build,.create和.create之间的区别! 何时应该使用?

所以我一直在看使用.build,.create和.create的人! 在他们的控制者越来越多。 与使用.new和passig param'd对象然后.save有什么不同? 有没有优点和缺点? 使用这些其他方法是否有好处?

有一些差异,但它们并不大:

  1. .create等同于.new然后是.save 。 这只是更简洁。
  2. .create! 等同于.new后跟.save! (如果保存失败则抛出错误)。 也只是短一点点
  3. 我认为.build 大多.new的别名。 它在Rails 3中以一种方式工作,在Rails <3.x中以另一种方式工作

然而,最重要的部分是可以通过关联( has_many等)来调用这些方法来自动链接这两个模型。

虽然create调用new然后save是正确的,但是在返回值中两个选项之间存在很大差异。

根据对象是否成功保存到数据库, Save返回truefalse 。 这可以用于上述问题的第一个例子中的stream量控制。

无论对象是否保存, Create都将返回模型。 这对上面的代码有影响,因为if语句的顶部分支将始终被执行,即使对象未通过validation也不会被保存。

如果您使用分支逻辑create ,则存在无声失败的风险,如果您使用new + save ,则不是这种情况。

create! 如果logging无效的话,不会遇到同样的问题。

在用于API(JSON / XML)响应的respond_with控制器中, create替代方法很有用。 在这种情况下,对象上存在的错误将导致错误在响应中返回,状态为unprocessable_entity ,这正是您所需要的API。

我总是使用new + save选项的HTML,尤其是如果你依靠stream量控制的返回值。

#create是更新的新版本并保存。 #创build! 如果validation不正确,则抛出exception。

我会第二个以上的答案。 加上create ,不能通过false作为你可以做save的论据。 将false作为parameter passing将跳过所有的railsvalidation