はじめに
今までスルーしてしまっていた中途半端に理解しているコードを、これを機にひとつひとつ深堀していきたいと思います。
lass ItemsController < ApplicationController
before_action :authenticate_user!, only: [:edit, :update, :destroy, :new]
before_action :set_item, only: [:edit, :update, :show, :destroy]
before_action :move_to_index, only: [:edit, :update, :destroy]
例えばこんな記述があったとする。
authenticate_user!
はログインログアウトを分けてくれて、move_to_index
はトップページに戻してくれて
とわかるんだけど、いまいちわからないのがset_item
。この子はなにをしてくれるんだろう。
解説
set_item
メソッドの役割は、params[:id]
から該当する商品の情報をデータベースから持って来て、@item
に代入する。
edit
や update
などのアクションをする前に @item
を使って該当する特定の商品データにアクセスできるようにしてくれている。
def set_item
@item = Item.find(params[:id])
end
params[:id]
は、リクエストのURL(例えば /items/5/edit
の場合は 5)から取得される商品の ID 。
Item.find(params[:id])
は、その ID に対応する商品をデータベースから探してきて、見つかった商品を @item
変数の中に入れてくれる。
set_item
を使う意味とは
同じ商品の情報を edit
update
show
destroy
の各アクションで使用するために、
set_item
があることでコードをまとめる事が出来て before_action
で一括して呼び出せる。
これにより、各アクション内に同じコードを書く必要がなくなって、コードの重複を減らし、可読性が向上する。
## おわりに
可読性をあげるため重複をなくす等のテクニックはプログラマーの必須スキルと思うので
これからもアウトプットしてひとつひとつ自分のものにしていきます。