今回はコントローラーのリファクタリングについてメモを残したいと思います
ruby on rails でコントローラーにコードを記述していって気づくとコントローラー内のコードの量がパンパンになってなぜこんなに長くなってしまったんだ( ;∀;)
という事が起きてしまう人も中にはいるのではないかと思います。そのうちの1人が私です
今回はコントローラーのリファクタリングについて大きく2つの方法を紹介したいと思います
①複数のコントローラに同じ処理が記述されている場合
・app/controllers/concerns/○○.rb(任意の名前)ファイルを追加し、moduleを設定したのち必要な箇所で読み込ませる
具体的には以下のように記述します
module TyoufukuRefactoring extend ActiveSupport::Concern private def syorinaiyou //中身記述 end end
そしてコントローラーないでは
class MainsController < ApplicationController include TyoufukuRefactoring before_action :syorinaiyou end
こうする事で複数コントローラーにある記述を省略して記述できるようになります
・親コントローラにメソッドを定義する
単純な話にはなりますが親コントローラーに共通の内容を記述する方法です
共通の親がApplicationControllerだった場合
app/controllers/application_controller.rbの中を以下のように記述するだけです
def ApplicationController < ActionController::Base //共通の内容を記述
end
②コントローラに複雑な処理を記述している場合
記述内容をモデルに移します
こちらも方法はシンプルでコントローラーに以下のように記述します
上はサンプルですがイコールの右辺が読み込みに行くコントローラーの名前になっています モデル自体は以下がサンプルで
とすることでモデルに処理内容を読み込みにいき結果を受け取る事ができます
※もし実行時にコントローラーでモデルが見つからないという趣旨のエラーが発生する時は、
を記述してあげる事で読み込めるようになる事も有ります
(読み込める時と読み込めない時の違いははっきりわかっていませんご存知の方がおられましたら教えて頂けると幸いです)
以上大きく2つ紹介しましたが参考にして頂けたら幸いです!!