前提・実現したいこと
関連付をしているレコードを一括で更新したいと考えています。
create
の時は同じようなやり方でうまくいっていたのですが、updateでは複数レコードを更新できずに困っています。
知恵をお貸しいただきたいです。よろしくお願いいたします。
発生している問題・エラーメッセージ
api_1 | app/controllers/api/v1/posts_controller.rb:24:in `update' api_1 | Started PATCH "/api/v1/posts/16" for 172.29.0.1 at 2021-09-06 19:14:32 +0900 api_1 | Processing by Api::V1::PostsController#update as HTML api_1 | Parameters: {"post"=>{"post_items_attributes"=>[{"content"=>"テストをします", "status"=>false}]}, "id"=>"16"} api_1 | Post Load (0.4ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT $2 [["id", 16], ["LIMIT", 1]] api_1 | ↳ app/controllers/api/v1/posts_controller.rb:23:in `update' api_1 | PostItem Load (0.5ms) SELECT "post_items".* FROM "post_items" WHERE "post_items"."post_id" = $1 [["post_id", 16]] api_1 | ↳ app/controllers/api/v1/posts_controller.rb:24:in `update' api_1 | Completed 204 No Content in 29ms (ActiveRecord: 6.5ms | Allocations: 6231)
該当のソースコード
ruby
1class Api::V1::PostsController < ApplicationController 2 def index 3 posts = Post.all 4 render json: posts 5 end 6 7 def create 8 posts = Post.new(post_params) 9 if posts.save 10 render json: "OK", status: 200 11 else 12 render json: "EEEOR", status: 500 13 end 14 end 15 16 def show 17 post = Post.find(params[:id]) 18 content = post.post_items 19 render json: {"post": post, "content": content}, status: 200 20 end 21////////////////////////////////////////////////////////////////////////////////// 22 def update 23 post = Post.find(params[:id]) # 関連付けを行なっているpost.itemsを更新したい 24 post.post_items.update(content_params) 25 end 26 27////////////////////////////////////////////////////////////////////////////////// 28 29 def destroy 30 post = Post.find(params[:id]) 31 if post.destroy 32 render json: {}, status: "OK" 33 else 34 render json: {}, status: "ERROR" 35 end 36 end 37 38 private 39 #updateで使用するパラメーター 40 def content_params 41 params.require(:post).permit(post_items_attributes:[:id, :content, :status]) 42 end 43 44 def post_params 45 params.require(:post).permit(:title, :author, :image, post_items_attributes: [:id, :content, :status]) 46 end 47end 48
JavaScript
1 update (context) { 2 const list = context.state.todos.list 3 const bookId = context.state.book.selectedBook.id 4 const content = 5 list.map((item) => { 6 return { 7 content: item.content, 8 status: false 9 } 10 }) 11 this.$axios.$patch(url.POST_API + 'posts/' + bookId, { 12 post: { 13 post_items_attributes: content 14 } 15 }) 16 }
試したこと
・post_allを使用しましたが、モデル自体にしか使用できないため、関連付けを行なった値を更新できませんでした。
・Railsコンソールを使用してレコードの更新を一箇所行なったところ問題なくレコードが更新できました。
補足情報(FW/ツールのバージョンなど)
・Rails6
・Nuxt 2.15
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。