【rails】beforeアクション

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

同じコードは二度と書かない

プログラミングの中で、同じコードは二度と書かない(ドライと言う)

重複しているコードを整理すると見やすくなる

@article = Article.find(params[:id])が多いので整理したい

class ArticlesController < ApplicationController

    def show
        @article = Article.find(params[:id])
    end

    def edit
        @article = Article.find(params[:id])
    end

    def update
        @article = Article.find(params[:id])
           #中略
    end

何度も使っているコードは別で定義しておく


beforeアクション

before_action ◯◯

before_actionで定義すると、controller内のアクションが実行される前に実行する

before_action :set_articleを定義

class ArticlesController < ApplicationController
    before_action :set_article

private内でset_articleを定義

    private

    def set_article
        @article = Article.find(params[:id])
    end

こうすると、controller内のすべてのアクションの前にset_article実行される


不要なコードは削除することができる

コードの修正をしたいときは1箇所のみ直せばいいので効率がよくなる

class ArticlesController < ApplicationController
    before_action :set_article

    def show
    end

    def edit
    end

    def update
           #中略
    end

    private

    def set_article
        @article = Article.find(params[:id])
    end

ただこのままだとcontroller内の違うアクションにも影響が出る

    def new
        @article = Article.new
    end

空の@articleを用意したい

→ 先に@article = Article.find(params[:id])が実行されるとエラーになってしまう


only:オプション

before_action :set_articleを適用させたいのはshow、edit、updateのみ

それ以外でbefore_action :set_articleは実行しなくていいので、以下を追記する

    before_action :set_article, only:[:show, :edit, :update]

これで必要なアクションにのみ、before_action :set_articleが実行される

#DAY15