代码之家  ›  专栏  ›  技术社区  ›  Sniggerfardimungus

是否可以强制更新activerecord关联而不保存它们?

  •  2
  • Sniggerfardimungus  · 技术社区  · 15 年前

    我有几个模型和 has_many belongs_to

    client1.server = the_server
    client2.server = the_server
    client3.server = the_server
    

    我的实际应用程序要比这个复杂得多,但是这个示例可以作为说明。

    我想在保存这些对象之前检查它们之间的关联。不过,ActiveRecord在保存它们之前不会更新它们的信息。在上面的例子中, the_server 不知道是谁 client1 , client2 ,或 client3 直到其中一人得救。我确信这有助于active_record的效率,但它会使内存中的模型实例处于不一致的状态。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Ryan Bigg Andrés Bonilla    15 年前

    呼叫 #reload 对对象进行更新。

        2
  •  0
  •   Jordan Brough    15 年前

    如果你这样开始:

    client1 = the_server.clients.build(:name => 'a client', ...)
    

    编辑:

    哦,我重新读了你的文章,意识到 the_server 也没有被拯救。在这种情况下,也许:

    client1.server = the_server
    the_server.clients << client1
    

    (请注意,如果服务器已保存,则这将保存client1)

    the_server.clients.build(:name => 'some client', ..., :server => the_server)
    

    有点多余,所以也许有更好的出路。

        3
  •  0
  •   Drew Blas    15 年前

    如果使用与创建关联相反的方式,则可以在保存模型之前查看它们:

    the_server.clients << client1
    the_server.clients << client2
    the_server.clients << client3
    

    client1.server 紧接着如果 the_server 已经存在。