説明するよりも、以下のJSONを見ていただいた方がわかりやすいと思いますが、
多対多の関係モデル(中間テーブル)で関連付けられたレコードのみを配列で格納したいです。
出力したいJSON
json
1[ 2 {id: 1, title: "ブログのタイトル" tags:["タグ1", "タグ2"]}, 3 {id: 2, title: "ブログのタイトル" tags:["タグ3", "タグ4"]} 4]
このような形にしたいのですが、以下のようになってしまっています。
json
1[ 2 {id: 1, title: "ブログのタイトル1" tags:["タグ1", "タグ2", "タグ3", "タグ4"]}, 3 {id: 2, title: "ブログのタイトル2" tags:["タグ1", "タグ2", "タグ3", "タグ4"]} 4]
blogに関連付けられているすべてのtagのレコードが、それぞれの配列に格納されてしまっている状態です。
「出力したいJSON」にするためにはどのような書き方をすれば良いでしょうか?
ご教授いただけると助かります。
#コード
blogコントローラ
ruby
1class Api::V1::BlogController < ApplicationController 2 def index 3 @blog = BlogTag.all.includes([:blog, :tag]) 4 end 5end
index.json.jbuilder
ruby
1tag_arr = [] 2json.array! @blog do |b| 3 json.id b.blog.id 4 json.title b.blog.title 5 json.tags tag_arr.push(f.tag.name) 6end
blogモデル
ruby
1class Blog < ApplicationRecord 2 has_many :blog_tags 3 has_many :tags, through: :blog_tags 4end
blog_tagモデル(中間テーブル)
ruby
1class BlogTag < ApplicationRecord 2 belongs_to :blog, optional: true 3 belongs_to :tag, optional: true 4end 5
tagモデル
ruby
1class Tag < ApplicationRecord 2 has_many :blog_tags 3 has_many :blogs, through: :blog_tags 4end 5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/04 16:36
2019/05/04 16:59
2019/05/05 13:59
2019/05/05 16:29