2016-04-16 4 views
0

を見つけていない、私は私の行動の一つに、このコードを持っていますa Selectクエリ。Railsは、一般的な私のコントローラでは、コントローラのメソッド

だから私はHow to redirect to a 404 in Rails?

この答えを見つけました。そして、私は、テンプレートの代わりにJSONのAPIエンドポイントをレンダリングしておりますので若干異なってみました。 params [:id]が定義されているかどうかはわかりません。

def not_found 
    render :json => {"status" => "404", "message" => "User with id #{params[:id]} not found"} 
    end 

はとにかく私は、クエリを変更:

@user = User.find(params[:id]) or not_found 

しかし、まだのActiveRecord :: RecordNotFound例外を上げています。

また、idパラメータとオブジェクトの型を渡すことができるすべてのコントローラで使用できる一般的なnot_foundアクションを作成することは可能でしょうか?

class ApplicationController 
    rescue_from ActiveRecord::RecordNotFound, with: :show_not_found_errors 

    # All the information about the exception is in the parameter: exception 
    def show_not_found_errors(exception) 
     render json: {error: exception.message}, status: :not_found 
    end 
end 

をこのように、任意のActiveRecordの:: RecordNotFound:いくつかの一般的な404、500、400、私はちょうどあなたのApplicationControllerにしていくつかのパラメータに

答えて

2

使用rescue_fromを渡すことができますJSONレスポンスをレンダリングする200個の方法と同様に

show_not_found_errorsメソッドでレスキューされます。これらのコードをApplicationControllerに追加すると、ApplicationControllerから継承された他のすべてのコントローラーで動作します。

+0

ありがとうございます!あなたのコードでは、オブジェクトが見つからないときに空のJSONを受け取っています。レンダリングjsonを置き換えるべきですか?exception、status :: not_found with my code? – lapinkoira

+0

もちろん、私のコードは単なる例です。 –

+0

私のアプリケーションのすべてのコントローラにこのコードを拡張する方法はありますか?私はそれらをすべて定義しなければなりません。 ApplicationController内の@lapinkoiraの – lapinkoira

関連する問題