エラーを検出したら 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 してないので戻ってこなくて試験が成功も失敗もしない、というワケワカな挙動だった訳です。後天性記憶不全というかナチュラル君って本当に怖い。