2011-02-22 16 views
8

¿Es posible forzar a un buscador dinámico de Rails a lanzar una excepción ActiveRecord::RecordNotFound en lugar de devolver nil cuando no puede encontrar un resultado?Force Rails 3 buscador dinámico para lanzar la excepción RecordNotFound?

Por ejemplo, cuando una bebida del apellido 'Nuka-Cola' no existe:

@not_found = Beverage.find_by_name('Nuka–Cola') 

En lugar de tener

@not_found == nil 

Podría la

.find_by_name('Nuka–Cola') 

método llamada lanzar una excepción ActiveRecord::RecordNotFound?

¿O tendré que verificar nil y arrojar la excepción manualmente?

Respuesta

20

Usa la versión bang.

@not_found = Beverage.find_by_name!('Nuka–Cola') 
+0

Impresionante, gracias! – stephenallred

+0

Simple y exactamente como esperaba que ActiveRecord implementara tal característica. – John

-2

Muchas gracias, Guise

Será más útil si se está trabajando en algunos piensos API REST. en lugar de mostrar la página de excepción html, renderizar JSON o XML significativo.

class ApiController < ApplicationController 
rescue_from ActiveRecord::RecordNotFound, :with => :not_found 

    def not_found(exception = nil) 
    render :json => { :message => exception.message, :request => request.fullpath }, 
         :status => 404 
    end 
end  
Cuestiones relacionadas