/var/log/messages

debugging with sixth sense

強烈なボケをカマシていた件

エラーを検出したら return していたorz

例外 raise しなきゃ 500 にならないのが完全に忘却の彼方でした。しかも before_filter 書いたのは良いのだけれど、if の書き方が微妙で昨晩からハマッていたというorz

とりあえずあと一時間あるので試験をがっつり書いて commit しておきたい。

追記

後から自分で見ても意味不明だったので整理しつつ追記することに。とりあえず備忘まで異常処理の書き方を控えておきます。

まず application_controller.rb に以下な形で raise した例外をよしなに処理する記述を盛り込んで

class ApplicationController < ActionController::Base
  protect_from_forgery with: :null_serssion
  rescue_from Exception, :with => :exception_proc

  private
  def exception_proc
    logger.info("invalid parameter")
    render :text => "internal error", :status => 500
  end
end

あとは controller 側で 500 を戻したい部分で以下な記述。

if hoge
  raise "Invalid Parameter"
end

これで Exception が raise されるので application_controller 側で catch して status 500 が render されるのか。

ちなみに

スデに忘却の彼方なんですが以下な記述になってまして

if hoge
  return
end

render してないので戻ってこなくて試験が成功も失敗もしない、というワケワカな挙動だった訳です。後天性記憶不全というかナチュラル君って本当に怖い。

Comments