Nuxt搭配Rails开发图书注册功能时无法批量保存post_items_attributes数据如何解决?
问题根因
你当前post_items_attributes字段固定只传入了list数组下标为0的单条数据,数组中仅包含1个对象,因此后端只能创建1条关联的post_item记录。
解决方案
1. 调整Nuxt端提交逻辑
将原来写死的单条数据替换为遍历整个list数组生成的对象数组,修改post_items_attributes字段的赋值逻辑:
const list = context.state.todos.list const selectedBook = context.state.book.selectedBook // 提交前先校验list是否为空,避免无效提交 if (list.length === 0) { // 可自行添加空列表提示逻辑 return } this.$axios.$post(url.POST_API + 'posts', { post: { title: this.$title(selectedBook), author: this.$author(selectedBook), image: this.$image(selectedBook), // 遍历list生成所有待提交的post_item数据 post_items_attributes: list.map(item => ({ content: item.content, status: item.status })) } }) .then((responseBook) => { context.commit('book/userBook', responseBook) context.commit('book/clearBook') context.commit('todos/clear') })
2. 检查Rails端配置
你的强参数配置已经符合嵌套属性提交要求,还需要确认Post模型中开启了嵌套属性配置:
# app/models/post.rb class Post < ApplicationRecord has_many :post_items # 必须添加这行配置才允许批量创建关联的post_item accepts_nested_attributes_for :post_items end
另外建议调整接口返回逻辑,修正错误拼写、调整状态码使其更规范,同时返回创建成功的Post数据供前端使用:
def create post = Post.new(post_params) if post.save # 返回创建完成的post对象,方便前端获取关联数据 render json: post, status: :ok else # 参数校验错误用422状态码更符合REST规范,修正拼写错误 render json: 'ERROR', status: :unprocessable_entity end end
内容的提问来源于stack exchange,提问作者Beginner Professional
相关产品推荐
相关产品推荐

