首页 文章

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

提问于
浏览
157

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

4 回答

  • 6

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

  • 222

    虽然 create 调用 new 然后 save 是正确的,但两个替代品的返回值之间存在很大差异 .

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

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

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

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

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

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

  • 5

    我是第二个上面的答案 . 加上 create ,无法传递 false 作为参数,您可以使用 save . 传递 false 作为参数将跳过所有rails验证

  • 32

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

    • .create 相当于 .new ,后跟 .save . 它更简洁 .

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

    • 我认为 .build 主要是 .new 的别名 . 它works one way in Rails 3和Rails <3.x中的另一种方式

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

相关问题