]> source.dussan.org Git - redmine.git/commitdiff
ActiveRecord::RecordNotFound exceptions handled more gracefully
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 2 Jan 2007 08:47:07 +0000 (08:47 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Tue, 2 Jan 2007 08:47:07 +0000 (08:47 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@133 e93f8b46-1217-0410-a6f0-8f06a7374b81

13 files changed:
app/controllers/account_controller.rb
app/controllers/application.rb
app/controllers/documents_controller.rb
app/controllers/issue_categories_controller.rb
app/controllers/issues_controller.rb
app/controllers/members_controller.rb
app/controllers/news_controller.rb
app/controllers/projects_controller.rb
app/controllers/queries_controller.rb
app/controllers/reports_controller.rb
app/controllers/repositories_controller.rb
app/controllers/versions_controller.rb
app/views/common/404.rhtml [new file with mode: 0644]

index ffd2419b3e315384f9f8d347e1f1c2f24fac82f4..fb775d1963e7563dfec9104e5f0c87498355f96f 100644 (file)
@@ -28,6 +28,8 @@ class AccountController < ApplicationController
   def show\r
     @user = User.find(params[:id])\r
     @custom_values = @user.custom_values.find(:all, :include => :custom_field)\r
+  rescue ActiveRecord::RecordNotFound\r
+    render_404\r
   end\r
 \r
   # Login request and validation\r
index 516285d770f9974cf205cf0154acbd9b60781d68..da01e09c8736766b0a10fc90d42f0589b50c1c48 100644 (file)
@@ -103,6 +103,12 @@ class ApplicationController < ActionController::Base
       redirect_to_url session[:return_to]
       session[:return_to] = nil
     end
+  end\r
+  \r
+  def render_404\r
+    @html_title = "404"\r
+    render :template => "common/404", :layout => true, :status => 404\r
+    return false\r
   end
 \r
   # qvalues http header parser\r
index 3cc8662ea7478ee631ec3f719f14156b1314517b..5ff3583d9cdd31a5ca569e86bb6756136a057896 100644 (file)
@@ -41,8 +41,7 @@ class DocumentsController < ApplicationController
     @attachment.increment_download\r
     send_file @attachment.diskfile, :filename => @attachment.filename\r
   rescue\r
-    flash.now[:notice] = l(:notice_file_not_found)\r
-    render :text => "", :layout => true, :status => 404\r
+    render_404\r
   end \r
   \r
   def add_attachment\r
@@ -62,5 +61,7 @@ private
   def find_project\r
     @document = Document.find(params[:id])\r
     @project = @document.project\r
+  rescue ActiveRecord::RecordNotFound\r
+    render_404\r
   end  
 end
index 965a15e780bdd7eb8b1b8b8809658540fd20638d..7f2e4cbe217f811084c75c728bb2beb7daab1ebd 100644 (file)
@@ -35,8 +35,10 @@ class IssueCategoriesController < ApplicationController
   end\r
 
 private\r
-       def find_project\r
+  def find_project\r
     @category = IssueCategory.find(params[:id])\r
-               @project = @category.project\r
-       end    \r
+    @project = @category.project\r
+  rescue ActiveRecord::RecordNotFound\r
+    render_404\r
+  end    \r
 end
index 7a3679386f8c83ab7293f2258a5e45242cccc509..d37333e37233dbfe55643886645d173ab25d6deb 100644 (file)
@@ -132,8 +132,7 @@ class IssuesController < ApplicationController
     @attachment = @issue.attachments.find(params[:attachment_id])\r
     send_file @attachment.diskfile, :filename => @attachment.filename\r
   rescue\r
-    flash.now[:notice] = l(:notice_file_not_found)\r
-    render :text => "", :layout => true, :status => 404\r
+    render_404\r
   end\r
 \r
 private\r
@@ -141,5 +140,7 @@ private
     @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])\r
     @project = @issue.project\r
     @html_title = "#{@project.name} - #{@issue.tracker.name} ##{@issue.id}"\r
+  rescue ActiveRecord::RecordNotFound\r
+    render_404\r
   end  
 end
index be3f717d1972e1efb1aca3cd478e71af33bd03ed..f595f2cf65528e75e4c0be62bbdfcb655581b39d 100644 (file)
@@ -33,9 +33,11 @@ class MembersController < ApplicationController
        end\r
 \r
 private\r
-       def find_project\r
+  def find_project\r
     @member = Member.find(params[:id]) \r
-               @project = @member.project\r
-       end  
+    @project = @member.project\r
+  rescue ActiveRecord::RecordNotFound\r
+    render_404\r
+  end  
   
 end
index 544b6eb8dc0b2832139e7d87e2ee06aa6aad52cf..0f2ae85c681cc0ae7e0d512b8756be725f7e4df2 100644 (file)
@@ -51,8 +51,10 @@ class NewsController < ApplicationController
        end\r
   \r
 private\r
-       def find_project\r
+  def find_project\r
     @news = News.find(params[:id])\r
-               @project = @news.project\r
-       end  
+    @project = @news.project\r
+  rescue ActiveRecord::RecordNotFound\r
+    render_404\r
+  end  
 end
index 78a1e466026c8dbbb10fb1031d34c0873b246b17..53293340ebba4ba8f8be47dd432b14775a817059 100644 (file)
@@ -500,8 +500,8 @@ private
   def find_project\r
     @project = Project.find(params[:id])\r
     @html_title = @project.name\r
-  rescue
-    redirect_to :action => 'list'                      \r
+  rescue ActiveRecord::RecordNotFound
+    render_404\r
   end\r
   \r
   # Retrieve query from session or build a new query\r
index 4bdd8aaa247ca4a86e568cd9adc6f88dbfc45f5c..7f7f01fd3d030d121a95acf9ae8ff550ed6d0256 100644 (file)
@@ -45,5 +45,7 @@ private
     @project = @query.project
     # check if user is allowed to manage queries (same permission as add_query)
     authorize('projects', 'add_query')
+  rescue ActiveRecord::RecordNotFound
+    render_404
   end
 end
index f493f5c6043219c1b3577c65deb4050838a0f72c..b825a8ac6838dc602939d355f626ecac0c9ad205 100644 (file)
@@ -98,10 +98,12 @@ class ReportsController < ApplicationController
   end\r
   \r
 private\r
-       # Find project of id params[:id]\r
-       def find_project\r
-               @project = Project.find(params[:id])            \r
-       end\r
+  # Find project of id params[:id]\r
+  def find_project\r
+    @project = Project.find(params[:id])               \r
+  rescue ActiveRecord::RecordNotFound\r
+    render_404\r
+  end\r
        \r
        def issues_by_tracker\r
     @issues_by_tracker ||= \r
index 9dbbfebd94bb4cad7612b9b9068abd6709db69b7..a10dfcc22ea90992232c5bf5539f16e1682a6a2d 100644 (file)
@@ -63,6 +63,8 @@ private
     @path = params[:path].squeeze('/').gsub(/^\//, '') if params[:path]
     @path ||= ''
     @rev = params[:rev].to_i if params[:rev] and params[:rev].to_i > 0
+  rescue ActiveRecord::RecordNotFound
+    render_404
   end
 
   def show_error
index d1980d74ff12aa1d39f99379127edb203dea8b09..5c2dcc7f6a6077459620e7cda6194d666ae9b3b8 100644 (file)
@@ -39,8 +39,7 @@ class VersionsController < ApplicationController
     @attachment.increment_download\r
     send_file @attachment.diskfile, :filename => @attachment.filename\r
   rescue\r
-    flash.now[:notice] = l(:notice_file_not_found)\r
-    render :text => "", :layout => true, :status => 404\r
+    render_404\r
   end \r
   \r
   def destroy_file\r
@@ -53,5 +52,7 @@ private
   def find_project\r
     @version = Version.find(params[:id])\r
     @project = @version.project\r
+  rescue ActiveRecord::RecordNotFound\r
+    render_404\r
   end  
 end
diff --git a/app/views/common/404.rhtml b/app/views/common/404.rhtml
new file mode 100644 (file)
index 0000000..a81eeba
--- /dev/null
@@ -0,0 +1,4 @@
+<h2>404</h2>\r
+\r
+<p><%= l(:notice_file_not_found) %></p>\r
+<p><a href="javascript:history.back()">Back</a></p>\r