02-09-2009, 01:21 PM
(Modification du message : 17-10-2009, 11:39 AM par Sephi-Chan.)
(02-09-2009, 09:14 AM)NicoMSEvent a écrit : Mais toi, que fais-tu alors?
Pourrais-tu nous mettre un petit exemple? (même en ruby si tu veux :p)
ActiveRecord s'occupe de jeter les exceptions qui vont bien. Après, plusieurs façon de les gérer :
Les gérer à la main, je trouve ça lourd est fastidieux.
class UsersController < PublicController
# On arrive sur cette action via l'URL /users/:id
def show
begin
# Cherche l'utilisateur avec l'id donné.
# Quand find ne trouve pas d'enregistrement, il lance
# une exception ActiveRecord::RecordNotFound.
@user = User.find(params[:id])
rescue ActiveRecord::RecordNotFound
# Gestion de l'exception.
end
end
end
Ne pas envoyer d'exception, les finders dynamiques sont des trucs qui permettent de faire des requêtes genre User.find_by_first_name_and_last_name("Romain", "Tribes"). Ça renvoie un enregistrement (le premier trouvé) ou nil
class UsersController < PublicController
# On arrive sur cette action via l'URL /users/:id
def show
# Cherche l'utilisateur avec l'id donné.
# Ici, le finder dynamique retourne nil
# s'il ne trouve rien.
@user = User.find_by_id(params[:id])
# Ou :
@user = User.first(:conditions => { :id => params[:id] })
end
end
Ou encore, la solution que j'ai adopté :
class UsersController < PublicController
rescue_from ActiveRecord::RecordNotFound, :with => :handle_record_not_found
# On arrive sur cette action via l'URL /users/:id
def show
@user = User.find(params[:id])
end
protected
def handle_record_not_found
# Cette méthode gère les exceptions ActiveRecord::RecordNotFound.
end
end
Je fais ça parce que à partir du moment où l'utilisateur a un ActiveRecord::RecordNotFound, c'est de sa faute. Donc je rend une page lui expliquant son erreur (après avoir envoyé un petit mail qui dit que telle personne fait des trucs louches ) ou le redirige directement ailleurs.
Sephi-Chan