Ruby on Railsでステータスコードを返す方法

やりたいこと

  1. 認証チェック
    NGなら401 (unauthorized) を返す。
  2. 認可チェック
    NGなら403 (forbidden) を返す。
  3. パラメータチェック
    NGなら400 (bad request) を返す
  4. 正常終了なら200 (ok) を返す

ステータスコードの指定方法

renderメソッドのオプションにstatusという項目があり、ここにステータスコードを指定することで実現できる。

render status: 400

実装したコード

基本的には、各チェックに該当した場合にrender status: {code}をすればよいのだが、Ruby on Railsで1アクション内に複数renderがあるといけないので、and returnを追加してあげる必要がある。

なお、statusの指定は数値だけでなく、それに対応するシンボルでもよしとされている。
render status: :unauthorizedなど。
以下の記事に詳細は記されている。

RailsのHTTPステータスのシンボル表現まとめ

class XxxController < ApplicationController
  def index
    unless isAuthenticationOk?
        #認証チェック
        render status: 401 and return
    end

    unless isAuthoraizationOk?
        #認可チェック
        render status: 403 and return
    end

    unless isParamOk?(params)
        #パラメータチェック
        render status: 400 and return
    end
    
    #正常終了
    render status: 200
  end
end

コメント

タイトルとURLをコピーしました