Pretty standard stuff: 1. User fills out form 2. User submits form 3. User thinks "doh! an error!" 4. User hits the browser back button 5. User updates the data in the form 6. User *thinks* he is updating the data by hitting submit again, but inserts another record. Now we have two records in the database, one is the correct one, and one is the bad one. How do we know witch one is the good one? The second one! I hear you all scream. But does that mean we should delete the first one? How do you deal with this situation? I think it is quite obvious what the user intended to do, and we should, in our webapp, do what the user wanted to do, not annoy him with stupid error messages like "Sorry, you can''t submit the same form twice", or "Sorry, a record with this ID already exists in our database" Is there a nice solution in rails to this very frequent problem in web applications? Thanks -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
It is a difficult problem to deal with, since Tech-savvy users will press the BACK button when they actually WANT a second record in the database! One method I have used is to redirect to the edit page after a create has been performed. For example def create @object = Object.new if @object.save redirect_to :action => ''edit'' eles render :action => ''new'' end end then they aren''t tempted to press back because they are already at the edit page. I hope that helps. S2 akira wrote:> Pretty standard stuff: > 1. User fills out form > 2. User submits form > 3. User thinks "doh! an error!" > 4. User hits the browser back button > 5. User updates the data in the form > 6. User *thinks* he is updating the data by hitting submit again, but > inserts another record. > > Now we have two records in the database, one is the correct one, and one > is the bad one. How do we know witch one is the good one? The second > one! I hear you all scream. But does that mean we should delete the > first one? How do you deal with this situation? > I think it is quite obvious what the user intended to do, and we should, > in our webapp, do what the user wanted to do, not annoy him with stupid > error messages like "Sorry, you can''t submit the same form twice", or > "Sorry, a record with this ID already exists in our database" > Is there a nice solution in rails to this very frequent problem in web > applications? > > Thanks > -- > Posted via http://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
DyingToLearn wrote:> It is a difficult problem to deal with, since Tech-savvy users will > press the BACK button when they actually WANT a second record in the > database! > > One method I have used is to redirect to the edit page after a create > has been performed. For example > > def create > @object = Object.new > if @object.save > redirect_to :action => ''edit'' > eles > render :action => ''new'' > end > end > > then they aren''t tempted to press back because they are already at the > edit page. > > I hope that helps.I found out that FF and IE "disable" the back button for a particular form if you submit the form to the page that rendered the form itself (I typed this by hand, it could not work as written here, but the concept is valid): $ rails test $ cd test $ ruby script/generate controller back $ cat > app/controllers/back_controller.rb class BackController < ApplicationController def backtest if request.method == :post session[:state] = ''saved'' redirect_to :action => ''backtest'' end end def clear session[:state] = nil redirect_to :action => ''backtest'' end end ^D $ cat > app/views/back/backtest.html.erb <html> <head> <title>Backtest</title> </head> <body> <% if session[:state] %> <%= ''Record saved'' %> <% else %> <% form_tag :action => "backtest" do %> <input type="submit" value="Submit"> <% end %> <% end %> </body> </html> ^D Now, if you go to http://localhost:3000/back/backtest and hit submit, you get the ''Record saved'' message, but the back button of the browser does not take you back to the form. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---