質問するログイン新規登録

Q&A

0回答

563閲覧

active_model_serializersを使って独自カラムを追加したい

Shika_Tech

総合スコア13

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2020/04/18 10:56

0

1

前提・実現したいこと

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

以上です。
ぜひアドバイスお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問