Modification de l'URL d'un objet dans Rails implique généralement deux choses:
Tout d'abord, modifiez les actions de contrôleur appropriées pour utiliser un outil de recherche qui fonctionne comme vous le souhaitez. Dans votre cas, vous voulez probablement écrire un viseur personnalisé dans votre modèle de facture, comme:
def self.find_by_id_or_sha1(id)
Invoice.find_by_id(id) || Invoice.find_by_sha1(id)
end
puis utilisez Invoice.find_by_id_or_sha1(params[:id])
dans vos actions de contrôleur (Afficher, modifier, mettre à jour, détruire). Deuxièmement, modifiez les URL générées pour suivre votre nouveau design (si vous le souhaitez). Donc, si vous voulez que link_to("Jan 1, 2010", @invoice)
passe à /client/invoice/0beec7b5ea3f0fdbc95d0
, remplacez la méthode to_param
par défaut dans votre modèle de facture. Par exemple:
def to_param
sha1
end
(Cela suppose votre hash SHA1 de facture est stockée dans l'attribut SHA1.)
pas vraiment une solution tout à fait, mais bonne idée! +1, bienvenue également à stackoverflow! –
Non sécurisé. Devrait inclure un sel sinon tout le monde peut simplement faire un SHA (int) pour trouver l'URL de chaque facture. – Espen