所以我一直在看人们使用.build,.create和.create!最近他们的控制者越来越多.只使用.new和passig param'd对象然后.save有什么区别?有利有弊吗?使用这些其他方法会带来好处吗?
zen*_*azn 228
有一些差异,但它们并不大:
.create相当于.new后面跟着.save.它更简洁..create!相当于.new后跟.save!(如果保存失败则抛出错误).它也只是一点点.build是主要的别名.new.它在Rails 3中以一种方式工作,在Rails <3.x中以另一种方式工作然而,最重要的部分是可以通过关联(has_many等)调用这些方法来自动链接两个模型.
nmo*_*ott 33
虽然这是正确的create调用new,然后save有他们的返回值的两个备选方案之间有很大的区别.
Save返回true或者false取决于对象是否已成功保存到数据库.然后,这可以用于上述问题中的第一个示例的流量控制.
Create无论对象是否已保存,都将返回模型.这对上面的代码有影响,因为if即使对象验证失败并且未保存,语句的顶部分支也将始终执行.
如果使用create分支逻辑,则存在静默失败的风险,如果使用new+ 则不是这种情况save.
create! 如果记录无效,则不会遇到与引发相同的问题.
在create其中替代可以在控制器有用respond_with用于API(JSON/XML)应答.在这种情况下,对象上存在错误将导致错误在响应中返回,状态为unprocessable_entity,这正是您想要的API.
我总是使用html 的new+ save选项,特别是如果你依赖于流量控制的返回值.
| 归档时间: |
|
| 查看次数: |
61571 次 |
| 最近记录: |