Rails 6嵌套形式茧不会保存子对象

Posted

技术标签:

【中文标题】Rails 6嵌套形式茧不会保存子对象【英文标题】:Rails 6 nested form cocoon won't save sub-objects 【发布时间】:2020-08-22 00:13:03 【问题描述】:

我正在尝试为可以有多个 BookAuthor 对象的 Book 对象实现嵌套表单。我已按照this 教程使用 Rails 6 中的 Cocoon gem 执行此操作,但它不起作用。表单本身在前端运行良好,可以正确添加和删除 BookAuthor 字段。服务器接收到的参数包含正确数量的 BookAuthor 属性,但这些子对象不会写入数据库,即使主 Book 对象写入。我已经能够让关联正常工作。

javascript 或 rails 控制台都没有错误输出。

注意:忽略 book.rb 中的include Hashid::Rails,我尝试了使用和不使用它,并且发生了同样的事情。另外,请忽略 book.rb 中对 Chapter 对象的任何引用,因为它们还不是表单的一部分。

以下是相关模型、视图和控制器的代码。模型文件还包含该模型的表模式。如果您需要更多代码,请告诉我。

服务器接收的参数(从服务器控制台):https://pastebin.com/nxAXkD3T

book.rb:https://pastebin.com/Xtxf52eT

book_author.rb:https://pastebin.com/miFhb5wR

_form.html.haml:https://pastebin.com/YaW1gRUe

_book_author_fields.haml:https://pastebin.com/FJw7CR2f

books_controller.rb: https://pastebin.com/0NYsCc7x

application.js:https://pastebin.com/rZLpe0iS

宝石文件:https://pastebin.com/TcGrQ9f5

Gemfile.lock: https://pastebin.com/apCMxNkJ

package.json: https://pastebin.com/9U7mB2NK

yarn.lock:https://pastebin.com/H3AzG3Bi

【问题讨论】:

edgeapi.rubyonrails.org/classes/ActionController/… 我以前没见过“params.fetch()”,我总是使用“params.require()”,所以我检查了 API,没有看到“ fetch()" 用于控制器中的强参数 - 我会将 "fetch" 更改为 "require" 然后检查。 删除attr_accessor :book_authors_attributes。在您的 book.rb 中,保存您的文件,然后查看是否有效。 @DanPerry cool 你能接受解决方案吗? @BKSpureon 完成 【参考方案1】:

无需添加attr_accessor :book_authors_attributes。在你的 book.rb 中。删除它。

这是自动添加了一些轨道魔法。

【讨论】:

以上是关于Rails 6嵌套形式茧不会保存子对象的主要内容,如果未能解决你的问题,请参考以下文章

使用茧自动以嵌套形式添加子项

如何使用茧宝石使用具有不同关系的嵌套形式?

如何在 Rails 6 中使用茧宝石

Rails has_many:通过嵌套形式

rails wicked gem has_one 关联和嵌套形式

Rails has_many :通过简单形式的嵌套形式