如何使用 ActiveRecord :: 嵌套属性进行多重关联

Posted

技术标签:

【中文标题】如何使用 ActiveRecord :: 嵌套属性进行多重关联【英文标题】:How to use ActiveRecord :: Nested Attributes for multiple association 【发布时间】:2021-12-19 23:21:19 【问题描述】:

我有 Article、Category 和 CategoryArticle 模型

# models/article.rb
Article < ApplicationRecord
  has_many :category_articles
  has_many :categories, through: :category_articles

  accepts_nested_attributes_for :categories
end

# models/category.rb
Category < ApplicationRecord
  has_many :category_articles
  has_many :articles, through: :category_articles
end

# models/category.rb
CategoryArticle < ApplicationRecord
  belongs_to :category
  belongs_to :article
end

我想通过nested_attributes保存包含分类的文章,例如:

# rails console
category = Category.first

article = Article.create(name: "country", categories_attributes:  id: category.id )

但是我收到以下错误:

/nested_attributes.rb:594:in `raise_nested_attributes_record_not_found!': Couldn't 
 find Category with ID=1 for Article with ID= (ActiveRecord::RecordNotFound)

如果您能帮助我了解如何使用nested_attributes 插入,我将不胜感激

【问题讨论】:

【参考方案1】:

我认为你在这里不需要accepts_nested_attributes_for

创建文章时可以传递分类的id:

category = Category.first

article = Article.create(name: "country", category_ids: [category.id])

【讨论】:

非常感谢您的解决方案和时间:D

以上是关于如何使用 ActiveRecord :: 嵌套属性进行多重关联的主要内容,如果未能解决你的问题,请参考以下文章

Rails 嵌套模型和虚拟属性初始化

嵌套属性不允许的参数

使用 ActiveRecord 查找 5 个嵌套表的结果

如何在具有名为“属性”的列的数据库上使用 ActiveRecord? (危险属性错误)

使用 Arel 进行嵌套集和连接查询并转换为 ActiveRecord::Relation

ActiveRecord::Rollback 在嵌套的 begin-rescue 块中的行为方式