3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【before_actionの具体的な使用法】Railsのリファクタリング

Posted at

before_actionとは?

before_actionとは、Railsのコントローラーで使用できるリファクタリングの一種です。

before_actionを使用すると、
コントローラで定義されたアクションが実行される前に、共通の処理を行うことができます。

具体的な使用方法

以下のような中身のコントローラーについて見ていきます。

app/controllers/tweets_controller.rb
class TweetsController < ApplicationController

  def index
    @tweets = Tweet.all
  end

  def new
    @tweet = Tweet.new
  end


  def create
    Tweet.create(tweet_params)
  end

  def destroy
    tweet = Tweet.find(params[:id])
    tweet.destroy
  end

  def edit
    @tweet = Tweet.find(params[:id])
  end

  def update
    tweet = Tweet.find(params[:id])
    tweet.update(tweet_params)
  end

  def show
    @tweet = Tweet.find(params[:id])
  end
  
  private
  def tweet_params
    params.require(:tweet).permit(:distance, :image)
  end
end

よく見ると、Railsの7つのアクションの内、
editとshowアクションの中身が、
@tweet = Tweet.find(params[:id])
が繰り返し使用されています。

このようなコードをリファクタリングし可読性を高めるために、
以下のように、before_actionを使用します。

app/controllers/tweets_controller.rb
class TweetsController < ApplicationController
  before_action :set_tweet, only: [:edit, :show]

  def index
    @tweets = Tweet.all
  end

  def new
    @tweet = Tweet.new
  end

  def create
    Tweet.create(tweet_params)
  end

  def destroy
    tweet = Tweet.find(params[:id])
    tweet.destroy
  end

  def edit
  end

  def update
    tweet = Tweet.find(params[:id])
    tweet.update(tweet_params)
  end

  def show
  end

  private

  def tweet_params
    params.require(:tweet).permit(:name, :image, :text)
  end

  def set_tweet
    @tweet = Tweet.find(params[:id])
  end
end

このように、
before_actionを利用して、edit、showの2つのアクションの前に実行される、
set_tweet(メソッド名は自分で決める)というメソッドを新たに定義し、

先ほど繰り返し使用していた
@tweet = Tweet.find(params[:id])
をまとめる事が可能になります。

#まとめ
before_actionを使用する事で、
コードが冗長になることを防ぎ、コードの可読性を上げる事ができます!

今回例として挙げたコードは、
edit、showの2つのアクションの中身が一緒でしたが、
繰り返し使用するコードが多ければ大きいほど効果がデカくなります!

Railsのリファクタリングとして、
参考にしてみてください!

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?