所以我一直在看人们使用.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
取决于对象是否已成功保存到数据库.然后,这可以用于上述问题中的第一个示例的流量控制.
Create
无论对象是否已保存,都将返回模型.这对上面的代码有影响,因为if
即使对象验证失败并且未保存,语句的顶部分支也将始终执行.
如果使用create
分支逻辑,则存在静默失败的风险,如果使用new
+ 则不是这种情况save
.
create!
如果记录无效,则不会遇到与引发相同的问题.
在create
其中替代可以在控制器有用respond_with
用于API(JSON/XML)应答.在这种情况下,对象上存在错误将导致错误在响应中返回,状态为unprocessable_entity
,这正是您想要的API.
我总是使用html 的new
+ save
选项,特别是如果你依赖于流量控制的返回值.
#create是new的新版本并保存.#创建!如果验证不是肯定的,则抛出异常.
我是第二个上面的答案.另外create
,一个人不能false
作为你可以做的论据save
.false
作为参数传递将跳过所有rails验证