rails5.1で、即時500エラー終了したい
GET引数が仕様通りではない→クラック開始だ→即拒否、
を実現するため、
phpでの
header('HTTP/1.1 500 Internal Server Error');
exit;
と同様のことを、
rails5.1のcontroller内で行おうとして、
if @entry.blank?
render text: "error"
throw(:abort)
end
と書いてみたのですが、意図通り即時終了になってくれません。
rails5.1で実現可能でしょうか?
- 2017-12-11追記
(コメント欄だとコードブロックが使えず改行も効かない為、ソースコード載せるのが不可能でした)
rails 5.1 の
rails generate scaffold entry title:string body:integer
が生成する app/controllers/entry_controller.rb は、以下のように、
「EntriesController.set_entry で @entry を取得する」
ようになっていまして、
(それ以前のバージョンの動きはわかりません。rails入門してまだ一週間経ってないので...)
そこで throw(:abort) しても効果が無い、という話でした。
app/controllers/entry_controller.rb
class EntriesController < ApplicationController
before_action :set_entry, only: [:show, :edit, :update, :destroy]
# GET /entries/1
def show
end
# GET /entries/new
def new
...
end
# GET /entries/1/edit
def edit
...
end
# POST /entries
def create
...
end
# PATCH/PUT /entries/1
def update
...
end
# DELETE /entries/1
def destroy
...
end
private
# Use callbacks to share common setup or constraints between actions.
def set_entry
@entry = Entry.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def entry_params
...
end
end