40195


GET引数が仕様通りではない→クラック開始だ→即拒否、  
を実現するため、  
phpでの

[code]

    header('HTTP/1.1 500 Internal Server Error');
    exit;
    
[/code]

と同様のことを、  
rails5.1のcontroller内で行おうとして、

[code]

    if @entry.blank?
      render text: "error"
      throw(:abort)
    end
    
[/code]

と書いてみたのですが、意図通り即時終了になってくれません。  
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

[code]

    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
    
[/code]


CC BY-SA 3.0
2017-12-08T23:07:52.667
40142
2017-12-11T14:50:39.420
2017-12-11T05:03:26.170
26568
26568
question
ruby-on-rails
rails5.1で、即時500エラー終了したい

[code]

    render text: 'error', status: 500
    
[/code]

でどうでしょうか。


CC BY-SA 3.0
2017-12-09T03:57:54.240
40147
2017-12-09T03:57:54.240
9608
40142
answer


例外を投げれば 500 になりますので、以下のような感じでいかがでしょう?

[code]

    def set_entry
      @entry = Entry.find(params[:id])
      if @entry.blank?
        raise 'error'
      end
    end
    
[/code]

`@entry.blank?` は真にはならないと思いますが、他の条件なら使えるのでは、と思います。


CC BY-SA 3.0
2017-12-11T14:50:39.420
40195
2017-12-11T14:50:39.420
5288
40142
answer