目次 閉じる
同じコードは二度と書かない
プログラミングの中で、同じコードは二度と書かない(ドライと言う)
重複しているコードを整理すると見やすくなる
@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_articleprivate内で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

