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嵌套形式茧不会保存子对象的主要内容,如果未能解决你的问题,请参考以下文章