Un backlink simple:
link_to 'Back', :back, class: "btn btn-primary"
devrait faire dans ce cas. Il utilisera le HTTP_REFERER
ou une fonction Javascript pour accéder à la page précédente. Voir le documentation pour plus d'informations.
Mise à jour:
Je vous besoin de quelques exceptions à la règle "simple lien vers", vous devez créer une solution personnalisée. Une telle solution pourrait être que vous utilisez link_to :back
par défaut mais remplacez-le en acceptant un paramètre "back_path" personnalisé dans des cas spéciaux. Vous pouvez créer un assistant personnalisé pour le faire.
L'exemple suivant utilise par défaut la liaison arrière standard, mais permet à la page précédente de définir un paramètre back_path
qui sera compris par l'assistant back_link
.
# application_helper.rb
def back_link(params, name: "Back", class: "btn btn-primary")
if params[:back_path].present?
link_to name, params[:back_path], class: class
else
link_to name, :back, class: class
ens
end
Maintenant, vous utilisez le lien normalement dans votre point de vue:
<%= back_link(params) %>
Et quand vous voulez remplacer le comportement par défaut, il suffit de passer la back_path
param. Vous passerez généralement ce paramètre à la page que vous souhaitez retourner. Ensuite, vous devrez passer ce paramètre sur toutes les autres pages et/ou rediriger.
Say, pour un exemple non trivial, que de la page client show
vous pouvez cliquer sur un lien pour créer une nouvelle facture, puis être redirigé vers la facture show
la page et à partir de là que vous souhaitez cliquer sur le lien en arrière et obtenir à la page client show
à nouveau.
Alors, ajoutez un lien vers les clients montrer la page, avec le back_path
param pointant vers cette page:
# views/clients/show.html.erb
<%= link_to 'New invoice', new_invoice_path(@client, back_path: client_path(@client)) %>
Dans le formulaire de la page new
, vous devrez ajouter un hidden_tag
de transmettre la back_path
param:
# views/invoices/_form.html.erb
<%= hidden_field_tag 'back_path', params[:back_path] %>
Ensuite, dans l'action du contrôleur create
, vous devrez également passer ce sur redirect param:
# controllers/invoices_controller.rb
redirect_to invoice_url(@invoice, back_path: params[:back_path])
Et enfin, vous pouvez maintenant utiliser l'assistant back_link
pour afficher le lien correct:
# views/invoices/show.html.erb
<%= back_link(params) %>
Je sais qu'il est laid, mais c'est comme ça ... De plus, il n'est pas une solution idéale que généralement vous voulez une hiérarchie des liens de retour lorsque vous parcourez les pages (et accédez à une page de différents chemins) et cette solution ne résout que le premier lien de retour. Mais je pense que c'est quelque chose à construire.
Cela ne pose aucun problème, sauf lorsqu'une nouvelle facture est créée que je redirige vers 'show', ce qui fait que le retour à partir de là vous ramène à la' nouvelle formule de facture' – Aloalo