リモートで働くプログラマーの検索結果

リモ太がググったことの覚書

継承元のApplicationControllerに定義したbefore_actionと各コントローラーに定義したbefore_actionの実行順

継承元のコントローラー

class ApplicationController < ActionController::Base
  before_action :puts_base1, :puts_base2
  before_action :puts_base3

  private
  
  def puts_base1
    p 'ApplicationController:1'
  end

  def puts_base2
    p 'ApplicationController:2'
  end

  def puts_base3
    p 'ApplicationController:3'
  end
end

子供のコントローラー

class PostsController < ApplicationController
  before_action :puts_child1, :puts_child2
  before_action :puts_child3

  def index
  end

  private
  def puts_child1
    p 'PostsController:1'
  end

  def puts_child2
    p 'PostsController:2'
  end

  def puts_child3
    p 'PostsController:3'
  end
end

これでこの posts#index にアクセスすると以下のように表示される

"ApplicationController:1"
"ApplicationController:2"
"ApplicationController:3"
"PostsController:1"
"PostsController:2"
"PostsController:3"

先に子供の方を呼びたい場合は prepend_before_actionを利用する 試しに :puts_child3だけ変えてみると

class PostsController < ApplicationController
  before_action :puts_child1, :puts_child2
  prepend_before_action :puts_child3 # <== Changed

  def index
  end

  private
  def puts_child1
    p 'PostsController:1'
  end

  def puts_child2
    p 'PostsController:2'
  end

  def puts_child3
    p 'PostsController:3'
  end
end

このような順番で処理される

"PostsController:3"
"ApplicationController:1"
"ApplicationController:2"
"ApplicationController:3"
"PostsController:1"
"PostsController:2"