質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby on Rails

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

API

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

Q&A

0回答

686閲覧

Rails api 1対多関係のデータ登録api

Shika_Tech

総合スコア13

Ruby on Rails

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

API

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

0グッド

0クリップ

投稿2020/04/17 04:02

編集2020/04/17 04:16

前提・実現したいこと

1対多関係にあるテーブルのデータを登録できるapiをRailsのapiモードで作りたいです。

具体的には

Categoryテーブルとideaテーブルを用いて
Categoryのnameカラムとideaのbody(内容)を登録。
Categoryのnameがすでに存在している場合は同じcategory_idを登録
未登録の場合は新しくcategory_idを登録

といった仕様です。

発生している問題・エラーメッセージ

現状postmanを使用してリクエストを送っています。

postman
現状、この方法だとテーブル毎にリクエストを送らないとデータを作成できません。
apiでデータを登録する際に
category_name(カテゴリー名)のような形で入力し、categoryを登録したいです。

該当のソースコード

category.rb

ruby

1class Category < ApplicationRecord 2 has_many :ideas, dependent: :destroy 3 validates :name, uniqueness: true, presence: true 4end

idea.rb

ruby

1class Idea < ApplicationRecord 2 belongs_to :category 3 validates :body, presence: true 4end

categories_controller.rb

ruby

1class CategoriesController < ApplicationController 2 3 def create 4 @category = Category.new(category_params) 5 if @category.save 6 render json: { status: 201, data: @category } 7 else 8 render json: { status: 422, data: @category } 9 end 10 end 11 12 private 13 14 def category_params 15 params.permit(:name) 16 end 17end

ideas_controller.rb

ruby

1class IdeasController < ApplicationController 2 3 def create 4 @idea = Idea.new(idea_params) 5 if @idea.save 6 render json: { status: 201, data: @idea } 7 else 8 render json: { status: 422, data: @idea } 9 end 10 end 11 12 private 13 14 def idea_params 15 params.permit(:body, :category_id) 16 end 17end

routes.rb

ruby

1Rails.application.routes.draw do 2 resources :categories, only: [:create] do 3 resources :ideas, only: [:create] 4 end 5end

apiモードを使用したのは初めてで、右も左もわからない状態です。

改めて質問を整理させて頂きますと、
・データを作成するとき親子関係にあるテーブルのデータ作成方法
・postmanを使用した時↑ようなリクエストはどのように送るのか
※例えば
http://localhost:3000/categories/1/ideas
のようにリクエストを送る時点でcategoryのidが指定されてしまうため、リクエストする時点でidを検索、追加できるようにしたい。

以上です。
よろしければご回答お願い致します。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問