代码之家  ›  专栏  ›  技术社区  ›  Tim Knight

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

  •  177
  • Tim Knight  · 技术社区  · 16 年前

    所以我看到人们在使用 .build , .create ,以及 .create! 最近在他们的控制范围内越来越多。与仅仅使用有什么区别 .new 并传递paramed对象,然后 .save ?有利弊吗?使用这些其他方法有好处吗?

    4 回复  |  直到 5 年前
        1
  •  241
  •   Community Mohan Dere    8 年前

    存在一些差异,但它们并不显著:

    1. .create 等价于 .new 紧随其后 .save 。它只是更简洁。
    2. .create! 等价于 紧随其后 .save! (如果保存失败,则抛出错误)。它也稍微短了一点
    3. 我认为 .build 通常 别名 works one way in Rails 3 Rails中的另一种方式<3.x

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

        2
  •  36
  •   nmott    12 年前

    虽然这是正确的 create 把…叫做 new 然后 save 这两个选项的返回值存在很大差异。

    Save 返回要么 true false 这取决于对象是否成功保存到数据库。然后,这可用于根据上述问题中的第一个示例进行流量控制。

    Create 无论对象是否保存,都将返回模型。这对上述代码有影响,因为 if 即使对象验证失败且未保存,语句也将始终执行。

    如果你使用 创建 使用分支逻辑,您可能会面临无声故障的风险,但如果您使用 + 保存 .

    create! 如果记录无效,则不会出现与它所引发的问题和异常相同的问题。

    这个 创建 替代方案在控制器中可能很有用 respond_with 用于API(JSON/XML)响应。在这种情况下,对象上存在错误将导致错误在响应中返回,状态为 unprocessable_entity ,这正是您想要从API获得的。

    我总是使用 + 保存 html的选项,特别是如果您依赖返回值进行流控制。

        3
  •  6
  •   rkj    16 年前

    #create是new和save的较短版本。 #创造!如果验证结果不是肯定的,则抛出异常。

        4
  •  5
  •   Vineeth Pradhan    14 年前

    我会支持上述答案。Plus for create ,一个人不能通过 false 作为一个你可以接受的论点 save .通过 错误的 因为参数将跳过所有rails验证