Windowsで始めるRuby on Rails入門【5.CRUD処理の実装】

どうも、tatsuです!

この記事はWindows環境でのRuby on Railsの入門記事シリーズの1つとなります。

前回記事はコチラ↓↓

Windowsで始めるRuby on Rails入門【4.アプリケーション作成】

2018.11.09

また、コチラの記事にも目を通しておくことをオススメします↓↓

Ruby on Railsで学ぶActiveRecord【CRUD】

2018.11.12

 
今回は第五回目として、CRUD処理の実装をしていきたいと思います。

CRUDとは以下の4つの頭文字のことで、ウェブアプリケーションの基本的な操作になります。

  • Create:作成
  • Read:閲覧
  • Update:更新
  • Delete:削除

 
この中でCreateについては前回作っているため、残り3つを実装していきます。

Read:閲覧

閲覧はshowというアクションで実装します。

まずviewsにshow.html.erbファイルを作成してください。

作成できたら以下のように編集します。

<h1>メモ表示画面</h1>

<%= link_to "一覧へ戻る", memos_path %>

<p>
<%= @memo.title %>
</p>
<p>
<%= @memo.contents %>
</p>
<p>
<%= @memo.updated_at %>
</p>

 
ビューができたら、memos_controller.rbにshowメソッドを追加します。

class MemosController < ApplicationController
    # index.html.erbに対応するアクション
    def index
        # 更新日時の降順でソートされた複数のMemoモデルを@memos変数に格納する
        @memos = Memo.all.order("updated_at desc")
    end

    # new.html.erbに対応するアクション
    def new
        # 空のMemoモデルを@memo変数に格納する
        @memo = Memo.new
    end

    # new.html.erbから値を送信した際に呼ばれるアクション
    def create
        # ビューから渡されたパラメータを使ってMemoモデルを作り、memo変数に格納する
        memo = Memo.new(memo_params)
        # DBに保存する
        memo.save!
        # 一覧画面へ遷移する
        redirect_to memos_url
    end

    def show
        # ビューから渡されたパラメータ(ここではmemoモデル)からIDを取得し、
        # IDをキーにしてMemoモデルを取得して@memo変数に格納する
        @memo = Memo.find(params[:id])
    end

    # privateと書いた後に書かれたメソッドは全てプライベートメソッドになる
    private

    # ビューから渡されたパラメータがMemoモデルに対応する形かどうかチェックするメソッド
    def memo_params
        params.require(:memo).permit(:title, :contents)
    end
end

Update:更新

更新では編集画面のedit.html.erbと、updateメソッドを作成していきます。 

viewsにedit.html.erbファイルを作成し、以下のように編集してください。

<h1>メモ編集画面</h1>

<%= link_to "一覧へ戻る", memos_path %>

<%= form_with model: @memo do |f| %>
    <p>
        <%= f.text_field :title %>
    </p>
    <p>
        <%= f.text_area :contents %>
    </p>
    <p>
        <%= f.submit %>
    </p>
<% end %>

 
ビューができたら、memos_controller.rbにedit,updateメソッドを追加します。

class MemosController < ApplicationController
    # index.html.erbに対応するアクション
    def index
        # 更新日時の降順でソートされた複数のMemoモデルを@memos変数に格納する
        @memos = Memo.all.order("updated_at desc")
    end

    # new.html.erbに対応するアクション
    def new
        # 空のMemoモデルを@memo変数に格納する
        @memo = Memo.new
    end

    # new.html.erbから値を送信した際に呼ばれるアクション
    def create
        # ビューから渡されたパラメータを使ってMemoモデルを作り、memo変数に格納する
        memo = Memo.new(memo_params)
        # DBに保存する
        memo.save!
        # 一覧画面へ遷移する
        redirect_to memos_url
    end

    def show
        # ビューから渡されたパラメータ(ここではmemoモデル)からIDを取得し、
        # IDをキーにしてMemoモデルを取得して@memo変数に格納する
        @memo = Memo.find(params[:id])
    end

    def edit
        @memo = Memo.find(params[:id])
    end

    def update
        memo = Memo.find(params[:id])
        # update!メソッドの引数に新しい値を格納してDB更新
        memo.update!(memo_params)
        redirect_to memos_url
    end

    # privateと書いた後に書かれたメソッドは全てプライベートメソッドになる
    private

    # ビューから渡されたパラメータがMemoモデルに対応する形かどうかチェックするメソッド
    def memo_params
        params.require(:memo).permit(:title, :contents)
    end
end

Delete:削除

削除はindex.html.erbから呼ばれるだけなのでビューはありません。
memos_controller.rbにdestroyメソッドを追加します。

class MemosController < ApplicationController
    # index.html.erbに対応するアクション
    def index
        # 更新日時の降順でソートされた複数のMemoモデルを@memos変数に格納する
        @memos = Memo.all.order("updated_at desc")
    end

    # new.html.erbに対応するアクション
    def new
        # 空のMemoモデルを@memo変数に格納する
        @memo = Memo.new
    end

    # new.html.erbから値を送信した際に呼ばれるアクション
    def create
        # ビューから渡されたパラメータを使ってMemoモデルを作り、memo変数に格納する
        memo = Memo.new(memo_params)
        # DBに保存する
        memo.save!
        # 一覧画面へ遷移する
        redirect_to memos_url
    end

    def show
        # ビューから渡されたパラメータ(ここではmemoモデル)からIDを取得し、
        # IDをキーにしてMemoモデルを取得して@memo変数に格納する
        @memo = Memo.find(params[:id])
    end

    def edit
        @memo = Memo.find(params[:id])
    end

    def update
        memo = Memo.find(params[:id])
        # update!メソッドの引数に新しい値を格納してDB更新
        memo.update!(memo_params)
        redirect_to memos_url
    end

    def destroy
        memo = Memo.find(params[:id])
        # destroyメソッドで対象のMemoモデルを削除
        memo.destroy
        redirect_to memos_url
    end

    # privateと書いた後に書かれたメソッドは全てプライベートメソッドになる
    private

    # ビューから渡されたパラメータがMemoモデルに対応する形かどうかチェックするメソッド
    def memo_params
        params.require(:memo).permit(:title, :contents)
    end
end

それぞれのリンクをindex.html.erbに追加する

各アクションができたら、index.html.erbにリンクを追加しましょう。

<h1>メモ一覧画面</h1>

<%# link_toはリンクを生成する簡単な方法 %>
<%# link_to 表示文字, リンク先のパス(routesのPrefixに_pathを繋げた文字列) %>
<%= link_to "新しくメモを作成する", new_memo_path %>

<ul>
<%# @memosにはmemoが複数入っているためループして表示している %>
<% @memos .each do |memo| %>
    <li>
     <%= memo.title%>
     <%= memo.updated_at %>
     <%= link_to "表示する", memo_path(memo) %>
     <%= link_to "編集する", edit_memo_path(memo) %>
     <%# ↓↓GET以外でアクセスする場合は「method: :メソッド名」というパラメータを追加する %>
     <%= link_to "削除する", memo_path(memo), method: :delete %>
    </li>
<% end %>
</ul>

CRUD処理の確認

それでは作成したCRUD処理ができているか確認しましょう!

サーバーを起動してウェブブラウザから以下のURLにアクセスしてください。

http://localhost:3000

以下のようにCRUD処理ができていればOKです!
一覧から表示・編集・削除ができていますか??

まとめ

お疲れさまでした!
これでCRUD処理の基本はマスターしましたね!

次回以降は、他のRailsの機能を使ってみたり、レイアウトなどを綺麗にしていきたいと思います。

それでは!

Windowsで始めるRuby on Rails入門【6.Validation】

2018.11.10

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です