【Rails】Scaffoldで生成したcontrollerにあるjsonって何?

Ruby on Railsアイキャッチ画像

Scaffold機能でCRUDをつくると、以下のようなcontrollerが生成される。

class DiariesController < ApplicationController
  before_action :set_diary, only: %i[ show edit update destroy ]

  省略

  def create
    @diary = Diary.new(diary_params)

    respond_to do |format|
      if @diary.save
        format.html { redirect_to @diary, notice: "Diary was successfully created." }
        format.json { render :show, status: :created, location: @diary }
      else
        format.html { render :new, status: :unprocessable_entity }
        format.json { render json: @diary.errors, status: :unprocessable_entity }
      end
    end
  end

  省略

end

ここで出てくるjsonとは何なのか?

JSONとは

JavaScript Object Notationの略称で、データ表現の形式の一つ。

つまりデータを表示するもの。

どんなふうに表示するかというと、、

以下の新規登録を行った場合

これのJSONは、urlの末尾に”.json”と付けることで以下のように表示され、確認ができる。

このように、Rubyのハッシュ形式でパラメータを表示してくれる。

というものでした。

JSON形式で呼ばれた場合の処理

では、json形式で呼び出される、以下の場合どのような処理が行われるのだろうか?

format.json { render :show, status: :created, location: @diary }

jbuilderとは

Railsが標準で採用するgemの一つ

JSON形式のデータを出力するための簡単な記述方法を提供してくれる。

ビューファイルの拡張子を「.json.jbuilder」とすることで、そのビューファイル内でjbuilderが提供する記述を使うことができる。

この場合、app/views/diaries/show.json.jbuilder がビューとして呼ばれる。

json.partial! "diaries/diary", diary: @diary

json.partial! “diaries/diary”で、部分テンプレートの_diaryを呼び出しているので、_diaryを見てみると、

json.extract! diary, :id, :title, :body, :created_at, :updated_at
json.url diary_url(diary, format: :json)

json.extract! は、モデルオブジェクトのカラム要素を指定して値を列挙するというメソッド

format: :jsonという指定により、diaryのidが3の場合、この値は/diaries/3.jsonとなる。

参考にした書籍はこちら

コメント