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

标签 ruby-on-rails activerecord associations has-many

  • 我知道它会在 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/

    相关文章:

    ruby-on-rails - 在我的文本区域显示 Markdown

    CSS 不识别类

    ruby-on-rails - Rails 表单 - 如果未选中任何复选框,则参数不包含在 POST 中

    ruby-on-rails - rails : Form for selecting an existing parent when creating new child records?

    ruby-on-rails - 未在另一个模型中引用的模型的 ActiveRecord 查询

    ruby-on-rails - 使用 Nokogiri 从与 Savon 的 SOAP 调用中读取响应

    mysql - 在 Rails 5/mysql 中制定左连接查询时出现的问题

    ruby-on-rails - 处理具有三种连接类型的 ActiveRecord where 子句的最佳方法

    ruby-on-rails - Rails - 如何在数据库中存储 "has_many"复选框关联?

    ruby - 使用 Sinatra 将一个类关联到 DataMapper 中的两个不同类