1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

controllerの中の before_action :set_item

Posted at

はじめに

今までスルーしてしまっていた中途半端に理解しているコードを、これを機にひとつひとつ深堀していきたいと思います。

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 に代入する。
editupdate などのアクションをする前に @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 で一括して呼び出せる。

これにより、各アクション内に同じコードを書く必要がなくなって、コードの重複を減らし、可読性が向上する。

## おわりに
可読性をあげるため重複をなくす等のテクニックはプログラマーの必須スキルと思うので
これからもアウトプットしてひとつひとつ自分のものにしていきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?