前提・実現したいこと
RailsのAPIモードを使用してJSONでレスポンスの整形をしたいです。
belongs_to関係にあるCategory.nameカラムをcategoryとして子関係となっているideaと共に返却したいです。
active_model_serializersというgemを使って整形しています。
発生している問題
idea_serializer.rbに独自カラムの設定ができない。
現状の出力結果
理想は
"category":
のvalueが親モデルのCategory.nameとなることです。
該当のソースコード
schema.rb
ruby
1ActiveRecord::Schema.define(version: 2020_04_16_101132) do 2 3 create_table "categories", force: :cascade do |t| 4 t.string "name", null: false 5 t.index ["name"], name: "index_categories_on_name", unique: true 6 end 7 8 create_table "ideas", force: :cascade do |t| 9 t.text "body", null: false 10 t.integer "category_id" 11 t.index ["category_id"], name: "index_ideas_on_category_id" 12 end 13 14end 15
category.rb
ruby
1class Category < ApplicationRecord 2 has_many :ideas, dependent: :destroy 3 validates :name, uniqueness: true, presence: true 4end 5
idea.rb
class Idea < ApplicationRecord belongs_to :category validates :body, presence: true end
ideas_controller.rb
class IdeasController < ApplicationController def create if category = Category.find_by(name: idea_params[:category_name]) else category = Category.create(name: idea_params[:category_name]) end idea = Idea.new(body: idea_params[:body], category_id: category.id) if idea.save render json: { status: 201, data: idea } else render json: { status: 422, data: idea } end end def index if category = Category.find_by(name: idea_params[:category_name]) ideas = category.ideas p category.name render json: ideas else render json: { status: 404, data: ideas } end binding.pry end private def idea_params params.permit(:body, :category_name) end end
idea_serializer.rb
ruby
1class IdeaSerializer < ActiveModel::Serializer 2 attributes :id, :category, :body 3 4 def category 5 "test" 6 # ここでcategory.nameを取得したい。 7 end 8end
以上です。
ぜひアドバイスお願い致します。
あなたの回答
tips
プレビュー