gpt4 book ai didi

ruby-on-rails - ActiveRecord 何时会保存关联?

转载 作者:行者123 更新时间:2023-12-03 07:51:24 25 4
gpt4 key购买 nike

  • 我知道它会在 autosave: true 时保存关联根据 https://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html
  • 我知道它会保存像这样构造的关联
    book = Book.new(name: 'foo')
    book.authors.build(name: 'bar') #has_many
    保存

  • 或喜欢
    book = Book.new(name: 'foo')
    book.build_author(name: 'bar') #has_one
    book.save
  • 我认为关联在分配或添加时也会保存
    book = Book.new(name: 'foo')
    book.author = Author.new(name: 'bar')
    保存

  • 或者
    book = Book.new(name: 'foo')
    book.authors << Author.new(name: 'bar')
    book.save
    但是,我有一个复杂的错误,它涉及到一些在我期望的时候不会自动保存的东西。所以,我想通过检查 book 来调试验证我认为将要保存的内容实际上会被保存。
    TL;博士;
    保存关联时检查什么内部状态?我假设模型有一个内部实例变量,如 associations_to_save关联会在创建时添加到其中。然后,当模型被保存时,它会遍历这些关联并保存它们。

    最佳答案

    不幸的是,没有像associations_to_save 这样的东西。然而,有一些规则说明什么时候保存。你可以在这里找到:http://guides.rubyonrails.org/association_basics.html .得分:4.1.5 (belongs_to)、4.2.5 (has_one)、4.3.4 (has_many) 和 4.4.4 (habtm)。

    更新:

    在 has_many 关联的情况下,如果 child.new_record?返回 true(子项尚未保存到 db),或者外键列需要更新。这就是为什么:

  • 将对象添加到已保存父项上的关联确实会保存新子项。
  • 将对象添加到未保存的父项上的关联不会保存(无外键值)
  • 如果正在保存未保存的父对象并且在关联缓存中有一些子对象,则保存这些对象以更新外键。
  • 关于ruby-on-rails - ActiveRecord 何时会保存关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18703036/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com