※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
同じコードは二度と書かない
プログラミングの中で、同じコードは二度と書かない(ドライと言う)
重複しているコードを整理すると見やすくなる
@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
で定義すると、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])
が実行されるとエラーになってしまう
before_action :set_article
を適用させたいのはshow、edit、updateのみ
それ以外でbefore_action :set_article
は実行しなくていいので、以下を追記する
before_action :set_article, only:[:show, :edit, :update]
これで必要なアクションにのみ、before_action :set_article
が実行される
#DAY15