カロリーメイトください

Barbaroi Ware(バルバロイ・ウェア)という名前でアプリ開発してます

『Ruby on Rails 5 アプリケーションプログラミング』を学習する6

Ruby on Rails 5アプリケーションプログラミング

Ruby on Rails 5アプリケーションプログラミング

序文

Ruby on Rails 5 アプリケーションプログラミング」学習6日目。
近々新しいWebサービス公開予定。よろしくおねがいします。

GitHub

github.com

進捗

  • 第3章
    • 3.5 編集画面の作成(edit/updateアクション)
    • 3.6 削除機能の確認(destroy アクション)
    • 3.7 準備:本書で使用するデータベース
      (学習時間:4時間)

コード実装部分

↓/app/controllers/cds_controller.rb

class CdsController < ApplicationController

  # 省略

  # PATCH/PUT /cds/1
  # PATCH/PUT /cds/1.json
  # _form.html.erbのフォームから
  # /cds/{キー値}にPATCHで入力データが渡されて発火する
  def update
    # フィルターに設定されている
    # set_cdメソッドにより@cdにはオブジェクトが取得されている

    # respond_toメソッドは指定されたフォーマットに応じて
    # 異なるテンプレートを呼び出す仕組み
    respond_to do |format|
      # 作成したオブジェクトを更新する
      # 成功したら
      if @cd.update(cd_params)
        # 指定されたフォーマットがHTMLなら
        # cds/{id値}にリダイレクトする
        # (@cdはオブジェクトのキー値と解釈される)
        # またオプションとしてデータを渡すことで
        # ビューテンプレートからローカル変数っぽく利用できる
        format.html { redirect_to @cd, notice: 'Cd was successfully updated.' }
        # 指定されたフォーマットがJSONなら
        # show.json.builderで新規作成されたデータをJSON形式で出力する
        # status:はステータスコード
        # location:はリソース位置のURLを表す
        format.json { render :show, status: :ok, location: @cd }
      # 失敗したら
      else
        # 指定されたフォーマットがHTMLなら
        # edit.html.erbを再描画する
        format.html { render :edit }
        # 指定されたフォーマットがJSONなら
        # エラー情報をJSON形式で書き出す
        # unprocessable_entityはデータを処理できなかったことを示す
        format.json { render json: @cd.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /cds/1
  # DELETE /cds/1.json
  def destroy
    # フィルターに設定されている
    # set_cdメソッドにより@cdにはオブジェクトが取得されている

    # オブジェクトを削除する
    @cd.destroy
    # respond_toメソッドは指定されたフォーマットに応じて
    # 異なるテンプレートを呼び出す仕組み
    respond_to do |format|
      # 指定されたフォーマットがHTMLなら
      # ビューヘルパーを経由して/cdsへリダイレクトする
      format.html { redirect_to cds_url, notice: 'Cd was successfully destroyed.' }
      # 指定されたフォーマットがJSONなら
      # headメソッドを使用してステータスコードを返す
      # :no_contentはステータスコード204 No Contentを表す
      format.json { head :no_content }
    end
  end

  # 省略

↓/app/views/cds/edit.html.erb

<h1>Editing Cd</h1>

<%# 部分テンプレートに@cdを渡してhtmlを描画する %>
<%# _form.html.erbが部分テンプレートとして呼び出される %>
<%= render 'form', cd: @cd %>

<%= link_to 'Show', @cd %> |
<%# cds_pathはビューヘルパーで %>
<%# /cdsというパスを返す %>
<%# ↓出力されるHTML %>
<%# <a href="/cds">Back</a> %>
<%= link_to 'Back', cds_path %>

↓/app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  # アノテーションの書き方
  # #TODO: あとから実装
  # #FIXME: 修正が必要
  # #OPTIMIZE: コードの最適化が必要
  # rails notes, rails notes:todo
  # などのコマンドで列挙できる
end

実行結果

f:id:yjkym:20180329161707p:plain

感想

scaffoldで自動出力されたソースコードへのコメント付け完了。
一応、それなりに理解できた気がする。
これからの学習で使うテストデータの準備が大変だった。
パラパラとこれからの内容を覗いてみると、割と気合い入れて取り組まないといけない感じだ。
がんばろう。
カロリーメイトください。

BGM

ソラまで / イズミカワソラ www.youtube.com