2011-10-07 8 views
13

get_by_id_or_404 on railsとして関数を使用することは可能ですか? exempleのために、私が使用する私のコントローラで:idが設定されていないか、先が見つからない場合はRailsでモデルまたは404を取得

@destination = Destination.find_by_id(params[:id]) 

、どのように私は、404ページにリダイレクトするようにレールを求めることができますか?

ありがとうございました!

答えて

30

を、Railsは自動的に404エラーページをレンダリングすることでActiveRecord::RecordNotFound例外を救います。

結果が見つからない場合は、ActiveRecord::RecordNotFoundを呼び出すファインダーのbangバージョンを使用してください。

@destination = Destination.find_by_id!(params[:id]) 

ただし、find_byメソッドを使用する理由はありません。単にfindにフォールバックするだけです。

1

私は生産で、それはエラーが発生し、404 OUに500

+2

finderメソッドを変更しない限り、そのメソッドは例外を生成しません。 –

4

が表示されます。これは、the guideからだと思う:

あなたは感嘆符を指定することができるの終わりに(!)彼らはClient.find_by_nameのように、すべてのレコードを返さない場合は、動的ファインダは、彼らがActiveRecordの:: RecordNotFoundエラーを高めるために取得する!(「ライアン」)

をこれが発生した場合、Railsはあなたのための404ページをレンダリングします。また、単にfind_by_idためのショートカットとしてfindを使用する:プロダクションモードで

@destination = Destination.find!(params[:id]) 
+1

感嘆符は不要です! [docsには 'find'](http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find)をチェックすると、IDを渡すとRecordNotFoundが発生します。 – molf

+1

findはfind_by_idのショートカットです! –

関連する問題