.build,.create和.create之间的区别! 何时应该使用?
所以我一直在看使用.build,.create和.create的人! 在他们的控制者越来越多。 与使用.new和passig param'd对象然后.save有什么不同? 有没有优点和缺点? 使用这些其他方法是否有好处?
有一些差异,但它们并不大:
-
.create
等同于.new
然后是.save
。 这只是更简洁。 -
.create!
等同于.new
后跟.save!
(如果保存失败则抛出错误)。 也只是短一点点 - 我认为
.build
大多是.new
的别名。 它在Rails 3中以一种方式工作,在Rails <3.x中以另一种方式工作
然而,最重要的部分是可以通过关联( has_many
等)来调用这些方法来自动链接这两个模型。
虽然create
调用new
然后save
是正确的,但是在返回值中两个选项之间存在很大差异。
根据对象是否成功保存到数据库, Save
返回true
或false
。 这可以用于上述问题的第一个例子中的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