fix bug 871 - show a good error message if gps trace not found
authorSteve Coast <steve@asklater.com>
Sat, 3 May 2008 14:29:01 +0000 (14:29 +0000)
committerSteve Coast <steve@asklater.com>
Sat, 3 May 2008 14:29:01 +0000 (14:29 +0000)
app/controllers/trace_controller.rb

index 4db6e8e15f4b80e4fafa6a33092d0cac60537a0d..3bb0d3323b0e2fa0b3f12261847862c4785a35ac 100644 (file)
@@ -83,6 +83,13 @@ class TraceController < ApplicationController
 
   def view
     @trace = Trace.find(params[:id])
+
+    unless @trace
+      flash[:notice] = "OH NOES! Trace not found!"
+      redirect_to :controller => 'trace', :action => 'list'
+      return
+    end
+
     @title = "Viewing trace #{@trace.name}"
     if !@trace.visible?
       render :nothing => true, :status => :not_found
@@ -90,7 +97,8 @@ class TraceController < ApplicationController
       render :nothing => true, :status => :forbidden
     end
   rescue ActiveRecord::RecordNotFound
-    render :nothing => true, :status => :not_found
+    flash[:notice] = "GPX file not found"
+    redirect_to :controller => 'trace', :action => 'list'
   end
 
   def create
@@ -107,11 +115,11 @@ class TraceController < ApplicationController
       end
     else
       @trace = Trace.new({:name => "Dummy",
-                          :tagstring => params[:trace][:tagstring],
-                          :description => params[:trace][:description],
-                          :public => params[:trace][:public],
-                          :inserted => false, :user => @user,
-                          :timestamp => Time.now})
+                         :tagstring => params[:trace][:tagstring],
+                         :description => params[:trace][:description],
+                         :public => params[:trace][:public],
+                         :inserted => false, :user => @user,
+                         :timestamp => Time.now})
       @trace.valid?
       @trace.errors.add(:gpx_file, "can't be blank")
     end
@@ -196,7 +204,7 @@ class TraceController < ApplicationController
       conditions[0] += " AND users.display_name = ?"
       conditions << params[:display_name]
     end
-    
+
     if params[:tag]
       conditions[0] += " AND EXISTS (SELECT * FROM gpx_file_tags AS gft WHERE gft.gpx_id = gpx_files.id AND gft.tag = ?)"
       conditions << params[:tag]
@@ -286,7 +294,7 @@ class TraceController < ApplicationController
     end
   end
 
-private
+  private
 
   def do_create(file, tags, description, public)
     name = file.original_filename.gsub(/[^a-zA-Z0-9.]/, '_')
@@ -295,7 +303,7 @@ private
     File.open(filename, "w") { |f| f.write(file.read) }
 
     @trace = Trace.new({:name => name, :tagstring => tags,
-                        :description => description, :public => public})
+                       :description => description, :public => public})
     @trace.inserted = false
     @trace.user = @user
     @trace.timestamp = Time.now