como hago para realizar una consulta en un modelo que cuando no
encuentre el rregistro no me genere error?
no me digan que le ponga rescue, por que eso no es lo que necesito.
Asi es la funcion, no devuelve nil, devuelve una excepcion. Y porque
decis que no es lo que necesitas?
como lo tengo voy dos veces a la base de datos.
una para chequear si existe el registro
y otra para cargar el modelo, esto me parece demàs.
Cuando vas 2 veces? Si con el find ya traes los datos -primera vez- y
despues no deberia volver a ir, al menos que ese “algo” q pusiste vos
sea una relacion y en ese caso si iria. Para evitar esa ida haces:
modelo = Modelo.find_by_id(1, :include => :algo )
entonces como cargo de una el modelo y que no me genere error si no
existe?
Excepcion te la va a dar el metodo de buscar una, haces un rescue y
rescatas el la excepcion, para eso esta rescue, no veo porque tu
negacion a usarlo.
Llendo a Rails, al no encontrar el elemento vas a tener una excepcion
de ActiveRecord. La cual vas a poder manejar, eso implica cualquier
codigo de recuperacion (q tambien podria tirar otra excepcion).
Recorda tambien que si buscas un elemento especifico de AR y no existe
te va a dar una excepcion y si buscas un conjunto de elementos
(User.find :all), no te va a tirar una excepcion sino un array vacio [
].
Llendo a Rails, al no encontrar el elemento vas a tener una excepcion
de ActiveRecord. La cual vas a poder manejar, eso implica cualquier
codigo de recuperacion (q tambien podria tirar otra excepcion).
Yo una vez tuve que usar el rescue, pero sólo me dejó si busco por el
id, entonces si lanza la
excepción:def ver_proyecto
begin
@proyecto=Proyecto.find(params[:id])
rescue ActiveRecord::RecordNotFound
logger.error(“Se ha intentado acceder a un proyecto no
valido #{params[:id]}”)
…
else
…
end
end
Recorda tambien que si buscas un elemento especifico de AR y no existe
te va a dar una excepcion y si buscas un conjunto de elementos
(User.find :all), no te va a tirar una excepcion sino un array vacio [
].
En cambio si busco por otro campo, el rescue lo ignoraba y tuve que
hacer algo así, no se si es que lo hacía mal con rescue:
def ver
permalink=params[:permalink] @pagina = Pagina.find_by_permalink(permalink)
if !@pagina
logger.error(“Se ha intentado acceder a una pagina no
valida #{params[:permalink]}”)
…
else
…
end
end