当前位置:  开发笔记 > 前端 > 正文

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

如何解决《.build,.create和.create之间的区别!什么时候应该使用?》经验,为你挑选了4个好方法。

所以我一直在看人们使用.build,.create和.create!最近他们的控制者越来越多.只使用.new和passig param'd对象然后.save有什么区别?有利有弊吗?使用这些其他方法会带来好处吗?



1> zenazn..:

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

    .create相当于.new后面跟着.save.它更简洁.

    .create!相当于.new后跟.save!(如果保存失败则抛出错误).它也只是一点点

    我认为.build主要的别名.new.它在Rails 3中以一种方式工作,在Rails <3.x中以另一种方式工作

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


Build与New不同.但不同之处并不在于它设置了关联链接(New也为新实例设置了这一点).不同之处在于Build使用新实例填充调用者,但New不会.例如:Wall.posts.new为您提供了与您的Wall相关联的新帖子,但此次调用后Wall.posts仍为空.Wall.posts.build为你提供了一个与你的Wall关联的新帖子,你的Wall.posts现在有一个帖子.
在Rails 4中,我刚刚在控制台中检查过.wall.posts.new和wall.posts.build都以完全相同的方式填充wall对象.在wall.posts.new之后的意思,wall.posts不是空的,如Amin的评论所述.
对3 - build的轻微澄清不仅仅是新的 - 它还设置了关联链接.
现在不仅仅是别名,没有特殊功能吗?

2> nmott..:

虽然这是正确的create调用new,然后save有他们的返回值的两个备选方案之间有很大的区别.

Save返回true或者false取决于对象是否已成功保存到数据库.然后,这可以用于上述问题中的第一个示例的流量控制.

Create无论对象是否已保存,都将返回模型.这对上面的代码有影响,因为if即使对象验证失败并且未保存,语句的顶部分支也将始终执行.

如果使用create分支逻辑,则存在静默失败的风险,如果使用new+ 则不是这种情况save.

create! 如果记录无效,则不会遇到与引发相同的问题.

create其中替代可以在控制器有用respond_with用于API(JSON/XML)应答.在这种情况下,对象上存在错误将导致错误在响应中返回,状态为unprocessable_entity,这正是您想要的API.

我总是使用html 的new+ save选项,特别是如果你依赖于流量控制的返回值.



3> rkj..:

#create是new的新版本并保存.#创建!如果验证不是肯定的,则抛出异常.



4> Vineeth Prad..:

我是第二个上面的答案.另外create,一个人不能false作为你可以做的论据save.false作为参数传递将跳过所有rails验证

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有