はじめに
今までスルーしてしまっていた中途半端に理解しているコードを、これを機にひとつひとつ深堀していきたいと思います。
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 で一括して呼び出せる。
これにより、各アクション内に同じコードを書く必要がなくなって、コードの重複を減らし、可読性が向上する。
## おわりに
可読性をあげるため重複をなくす等のテクニックはプログラマーの必須スキルと思うので
これからもアウトプットしてひとつひとつ自分のものにしていきます。