2 flat logo on transparent 256
2018-07-16

Ruby On RailsでConcernsを利用してControllerの処理を共通化する

Pexels 09230121

Ruby On Railsの原則として DRY(Don’t Repeat Yourself)の原則というものがあり、この原則は同じコードは1箇所に記載しましょうという内容になります。

サービスが拡大してくるとどうしても重複するコードが発生しますので、今回は各Controllerで、同じ処理をしているメソッドをActiveSupport(コア拡張機能)のConcernsを利用して1つにまとめます。

各Controllerの処理

例えば、記事一覧を表示する際の処理を行うArticlesControllerと

管理者が記事を編集する処理を行うDashboardsControllerがあるとします。

下記各Controllerのサンプルコードをご覧になってわかると思いますが、カテゴリーの一覧を表示するための処理が重複しています。

class ArticlesController < ApplicationController
  before_action :set_categories
 #中略

  def set_categories
    @categories = Category.all
  end
 #中略
end
class DashboardsController < ApplicationController
 before_action :set_categories
 #中略

  def set_categories
    @categories = Category.all
  end
 #中略
end

こちらのカテゴリー一覧を表示する機能をConcernsでまとめます。

Concernsのサンプルコード

Concernsディレクトリ配下にファイルを新規作成します。

新規作成ファイルパス:controllers/concerns/common_actions.rb

module CommonActions
 #以下extendは必須
  extend ActiveSupport::Concern

  def set_categories
    @categories = Category.all
  end

end

※ファイル名は変更可能

それぞれのControllerで作成したcommonactionsファイルの setcategoriesメソッドを呼び出します。

class ArticlesController < ApplicationController
 #以下includeは必須
  include CommonActions

  before_action :set_categories
  #中略
end
class DashboardsController < ApplicationController
 #以下includeは必須
  include CommonActions

  before_action :set_categories
  #中略
end

以上になります。 これで重複コードをまとめることができました。

その他関連記事

Ruby On Railsで検索機能を実装する|ransack

Ruby On Railsでredcarpetを利用し、シンタックスハイライトに対応したブログ機能を実装する

Ruby On Railsのデバッグツール byebugの紹介

Ruby On Rails4で簡易ブログを作成する1 | VIew Controller ルートを作成する

Ruby On Railsで外部APIを利用して、簡単なアプリケーションを作成する

Ruby On Rails でページネーションを設定する

前の記事
次の記事