hello-world.jp.net
webエンジニアのメモ。とりあえずやってみる。

[rails]特定のcontrollerではbefore_actionをskipしたい

公開日時

Ruby2.1.4, Rails4.1.7で確認。

タイトルだけだと少し分かりづらいのですが、ApplicationController内にbefore_actionで事前処理を設定している状態で、特定のcontrollerではbefore_actionをskipしたい、という場合の対応方法メモです。

before_actionにifオプションを指定して、条件チェック用のメソッドを定義します。

ApplicationControllerでは条件メソッドの戻り値がtrueになるようにしておき、skipしたいControllerでは条件メソッドをオーバーライドしてfalseを返すようにすればできました。

  • ApplicationController
class ApplicationController < ActionController::Base
  before_action :before_first, :before_second, if: :use_before_action?

  private

  def before_first
    # 事前処理その1
  end

  def before_second
    # 事前処理その2
  end

  # 条件チェック用のメソッド
  def use_before_action?
    true
  end
end
  • ApplicationControllerを継承したApi::PingController
class Api::PingController < ApplicationController
  def index
    head 200
  end

  private

  # falseを返すようにオーバーライド
  def use_before_action?
    false
  end
end

これでApi::PingControllerでのみbefore_actionをskipすることができました。

参考


Related #Rails

railsとsinatraの使い分け

sinatraでアプリを作っていたら、色々機能が足りなかったので継ぎ足し継ぎ足しで色々増やしていったら結局railsのようなもの、になってしまいました。

[mysql][rails]Character set 'utf8mb4' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file

mysql5.1が動いていた環境をmysql5.6にアップデートした後、rake db:createで utf8mb4のDBを作成しようとしたところ以下のエラーが発生

[rails]omniauth-twitterで大きいサイズ(bigger)のプロフィール画像を取得する

ruby2.1, rails4.1.1で確認 omniauth-twitterを使ってtwitter認証を行った際にプロフィール画像を取得したかったのですが、デフォルト設定だと、`auth['info']['image']` に入ってくる画像URLの画像サイズが小さいので、大きい画像を取得するようにしました。

[rails]erbとunderscore.jsを一緒に使ったらundefined local variables in templatesエラーが発生

erbのテンプレート内にunderscore.js用のテンプレートを記述していたら