Page precedente

Bonjour à tous,
j’essaye de créer une action pour rediriger l’utilisateur à sa page
précédente une fois l’action valider mais je n’arrive pas. Je fais :

def modifier
@user= User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:notice] = "Modification reussie.’
redirect_to :action => “back”
end

et là la redirection vers la page precedente ne marche pas.

Quelqu’un poura m’aider s’il vous plait.
Merci.

déjà, il manque un “end” après ta redirection,

Le 5 févr. 08 à 17:41, Hammes Hhh a écrit :

Bonjour,
Merci pour votre reponse.
J’ai ajouter le end, mais malgré ça j’ai le message suivant :
Unknown action
No action responded to back
Merci pour votre aide.

Bonjour,

Elle ressemble à quoi ta méthode “back” et dans quel controlleur ?
Le 6 févr. 08 à 09:06, has Hhh a écrit :

As-tu m�me une action back. Tu ne penses pas que back est un mot cl� au
moins ?

2008/2/6 Guillaume BELLEGUIC [email protected]:

J’ai ajouter le end, mais malgr� �a j’ai le message suivant :


Cyril M.

Merci pour vos réponses à tous.
En fait je n’ai pas d’action back.
Ce que je ne sais pas faire avec rails c’est de rediriger l’utilisateur
à sa page précédente à la manière de javascript:history.back().
J’ai tenté :
redirect_to :action => “back”
mais ce n’est pas ça qu’il fallait faire.
Merci à vous de m’aider à trouver la solution. J’ai chercher avec Google
et dans le livre Ruby on Rails de David Heinemeier mais je n’ai rien
trouvé.
Bonne journée.

essaie :
render :update do |page|
page.back() #pas sur de moi ou “history.back()”
end

Le 6 févr. 08 à 12:27, has Hhh a écrit :

Le 06/02/08, Cyril M. [email protected] a écrit :

As-tu m�me une action back. Tu ne penses pas que back est un mot cl� au
moins ?

idem :slight_smile:
je me posais la même question

after_filter plutôt que after_action

2008/2/6 Cyril M. [email protected]:

et dans le livre Ruby on Rails de David Heinemeier mais je n’ai rien

  session[:return_to] = request.request_uri


Cyril M.
http://blog.shingara.fr


Cyril M.

Salut,
J’ai essayait :

render :update do |page|
page.back()
end

render :update do |page|
page.history.back()
end

et
render :update do |page|
page.history.go(-1)
end

pour les 3 cas et j’eu une fenêtre de dialogue Windows pour télécharger
le fichier, avec deux boutons enregistrer ou annule. Quand je télécharge
le fichier, juste histoire de voir son contenu, voilà son contenu :
try {
Page.back();
} catch (e) { alert(‘RJS error:\n\n’ + e.toString());
alert(‘Page.back();’); throw e }

Merci pour votre aide.

Question naïve :

Vouloir mettre un lien “back” n’est-ce pas cherchez des ennuis ?

  1. La flèche “back” du navigateur fait ça très bien et correspond à un
    réflexe utilisateur raisonnablement répandu.

  2. Pour peu qu’en gérant l’action “back” on introduise des différences
    de
    comportement d’avec la flèche “back” du navigateur, l’utilisateur va
    être
    perdu.

Une bonne raison de le faire quand même ?


Web development is coming of age with Ruby on Rails
blog.lachaise.org

2008/2/6 has Hhh [email protected]:

trouvé.

La meilleur solution selon moi est de faire un système de filtre comme
le filtre redirect_to_or_back qui utiliser sur le plugin
restfull_authentification. Voici un exmple d’implémentation live et
non testé qui pourrait marcher :slight_smile:

Donc ton applicationController :

include Return
after_action :store_location

def mon action
redirect_back if params[:back]
end

#/lib/return_to.rb
Module Return
# Store the URI of the current request in the session.
#
# We can return to this location by calling
#redirect_back_or_default.
def store_location
session[:return_to] = request.request_uri
end

# Redirect to the URI stored by the most recent store_location call
def redirect_back
  redirect_to(session[:return_to])
end

end


Cyril M.

D’accord avec Philippe !
back() c’est pas top !

Utilise plutôt :

page.redirect_to(:controller => ‘mycontroller’, :action => ‘index’)

qui va te générer :

window.location.href = “/mycontroller”;

2008/2/6 philippe lachaise [email protected]:


Mathieu FOSSE

Salut à tous,

Le problème c’est que je n’ai pas (je ne sais pas faire) la trace de la
navigation de l’utilisateur. La solution :
redirect_to(:controller => ‘mycontroller’, :action => ‘index’)

je ne sais pas de quel ‘mycontroller’ est parti pour le redirige Ã
mycontroller/index.

Pour moi c’est une question d’ergonomie, l’utilisateur n’a pas besoin
d’utiliser la fleche retour du navigateur, une foi l’action executer
c’est rails qui le retourne là où il était.
Merci beaucoup pour votre aide.

Le 06/02/08, has Hhh a écrit :

Le problème c’est que je n’ai pas (je ne sais pas faire) la
trace de la navigation de l’utilisateur. La solution :
redirect_to(:controller => ‘mycontroller’, :action => ‘index’)

je ne sais pas de quel ‘mycontroller’ est parti pour le redirige à
mycontroller/index.

Pour moi c’est une question d’ergonomie, l’utilisateur n’a pas
besoin d’utiliser la fleche retour du navigateur, une foi l’action
executer c’est rails qui le retourne là où il était.

Essaie :

redirect_to :back

dans ton action.

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

Bonjour à tous,

Voila j’ai creer un controlleur :

  def pagePrecedente
      # redirect_to :back

        # render :update do |page|
        #  page.history.go(-1) ou page.history.back()
        # end

         #session[:return_to] = request.request_uri
  end

aucune solution des quatre solution n’a marché. (bien sur je ne
decommente qu’une une ligne ou un block à la fois)

Merci pour votre aide

Pour faire une redirection vers la page précédente, c’est effectivement
:
redirect_to :back
et non pas :
redirect_to :action => “back”

Néanmoins, tu vas etre coincé car il faudrait faire un retour de 2
“crans”
pour revenir à la page de départ.
En effet, l’appel à l’action update compte aussi pour 1.

J’ai pas mal cherché une solution propre, quitte à utiliser les
sessions,
mais je n’ai pas été satisfait.
Ducoup j’utilise le pluging “history”.
C’est pas mal, ça gère bien les retours en arriere (1 cran, 2 crans, 10
crans…), le plugin semble pérenne et pas trop gourmand.
Il faut quand meme se méfier par rapport à la navigation, et d’éviter
qu’un
retour puisse impacter la bdd, sans qu’on s’en rende compte…
Il m’a d’ailleurs semblé comprendre que c’est par rapport à ce risque
que le
back(-2) n’est pas implémenté dans Rails.

En espérant avoir un peu aidé, bonne continuation.
FJ

2008/2/7, has Hhh [email protected]:

Merci pour votre reponse,
Je commence à me fatigué de RoR, on dirait dès qu’on sort des rails ca
devient du bricolage pas loins de PHP. Il faut etre dans les normes
sinon c’est des journee de recherche pour une solution elegante.
Finalement qu’est qu’on gagne.
A+

Salut. Je suis impressionné par le nombre de personne sur cette liste
qui ne savaient pas qu’on pouvait écrire
redirect_to :back
ce qui équivaut à
redirect_to request.env[“HTTP_REFERER”]

Je me permet donc de citer la doc officielle de rails en bas du message,
c’est disponible notamment sur railsbrain.
http://www.railsbrain.com/api/rails-2.0.2/doc/index.html?a=M000461&name=redirect_to

Plus généralement, utiliser un debugger comme celui de netbeans et
mettre un point d’arrêt permet d’explorer toutes les variables du moment
et de voir si il n’y en a pas une qui peut correspondre à notre besoin.

Effectivement, la solution
redirect_to :back
ne marche pas pour un back à 2 crans (par exemple si on a déjà redirigé
une fois). Donc si l’update est appelé depuis l’index, c’est bon, si
l’update est appelé depuis un formulaire d’edition lui même appelé
depuis l’index, c’est pas bon.

Au delà de deux cran il faut utiliser la session comme mémoire, et ça
facilite le travail s’il y a un plugin fourni pour ça, donc merci à
Frédéric Jay pour avoir citer le plugin history.
Sans le plugin, il faut faire un truc du style
session[:back]=request.path
au moment ou tu es dans le controlleur de ton index
puis
redirect to session[:back]
depuis ton update

Cependant, il faut savoir que ce genre de solution basé sur les session
peut engendrer des comportement bizarre si l’utilisateur fait beaucoup
joujou avec le bouton retour du navigateur. Cette remarque n’est pas
propre à rails, mais générale au web.

A près il y a la solution javascript grâce à rjs que tu as un peu
exploré. Je suis sur qu’on peut la faire marcher. Mais là c’est balo si
l’utilisateur a pas javascript. J’ai vu que tu pennais un peu et je ne
saurais pas te conseiller sur ce thème.

Je ne sais pas pourquoi j’avais laissé ma réponse initiale dans mes
brouillons sans l’envoyer, donc désolé d’arriver après la bataille, je
vous la met quand même en bas.

Donc bref, Hammes Hhh, si tu sens mieux le php, pourquoi pas?
Ca n’empêchera pas qu’il faudra bien fermer les “if” que tu ouvres, et
que ce sera plus facile si tu sais ou trouver la doc, si tu as un
environnement de dev qui te signale tes fautes bêtes de syntaxe et un
environnement de debuggage qui te permette d’explorer ton programme
pendant son exécution.

Hammes Hhh a écrit :

end

il manque effectivement un “end” pour fermer le “if”, et il me semble
qu’il faut écrire:

redirect_to :back

au lieu de

redirect_to :action => “back”

DOC DE RAILS

redirect_to(options = {}, response_status = {})

Redirects the browser to the target specified in options. This parameter
can take one of three forms:

 * Hash - The URL will be generated by calling url_for with the 

options.
* Record - The URL will be generated by calling url_for with the
options, which will reference a named URL for that record.
* String starting with protocol:// (like http://) - Is passed
straight through as the target for redirection.
* String not containing a protocol - The current protocol and host
is prepended to the string.
* :back - Back to the page that issued the request. Useful for
forms that are triggered from multiple places. Short-hand for
redirect_to(request.env[“HTTP_REFERER”])

Examples:

redirect_to :action => “show”, :id => 5
redirect_to post
redirect_to “http://www.rubyonrails.org
redirect_to “/images/screenshot.jpg”
redirect_to articles_url
redirect_to :back

The redirection happens as a “302 Moved” header unless otherwise
specified.

Examples:

redirect_to post_url(@post), :status=>:found
redirect_to :action=>‘atom’, :status=>:moved_permanently
redirect_to post_url(@post), :status=>301
redirect_to :action=>‘atom’, :status=>302

When using redirect_to :back, if there is no referrer, RedirectBackError
will be raised. You may specify some fallback behavior for this case by
rescuing RedirectBackError.

Merci pour votre reponse.
J’ai cru un moment donnee que Rails apporte un grain de temps important.
C’est vrai si l’application est simple. Ca se complique enormement si
l’application est plus au moins importante. Finalement il n’y a pas de
langage ideal. C’est selon comme il dirait l’autre. Ceci dit RoR a pour
lui un code propre comme python.
Bonne journee.