custom 404 page

Oleg committed Oct 14, 2010
commit 4cc8eb7692518426807b6e7e9e3438e1496fec94
Showing 3 changed files with 25 additions and 4 deletions
app/controllers/cms_content_controller.rb +7 -3
@@ @@ -3,9 +3,9 @@ class CmsContentController < ApplicationController
before_filter :load_cms_page, :only => :render_html
before_filter :load_cms_layout, :only => [:render_css, :render_js]
- def render_html
+ def render_html(status = 200)
layout = @cms_page.cms_layout.app_layout.blank?? false : @cms_page.cms_layout.app_layout
- render :inline => @cms_page.content, :layout => layout
+ render :inline => @cms_page.content, :layout => layout, :status => status
end
def render_css
@@ @@ -21,7 +21,11 @@ protected
def load_cms_page
@cms_page = CmsPage.find_by_full_path!("/#{params[:cms_path]}")
rescue ActiveRecord::RecordNotFound
- render :text => 'Page not found', :status => 404
+ if @cms_page = CmsPage.find_by_full_path('/404')
+ render_html(404)
+ else
+ render :text => 'Page not found', :status => 404
+ end
end
def load_cms_layout
test/functional/cms_content_controller_test.rb +18 -0
@@ @@ -30,6 +30,24 @@ class CmsContentControllerTest < ActionController::TestCase
assert_response 404
end
+ def test_render_page_not_found_with_custom_404
+ CmsPage.create!(
+ :label => '404',
+ :slug => '404',
+ :parent_id => cms_pages(:default).id,
+ :cms_layout_id => cms_layouts(:default).id,
+ :cms_blocks_attributes => [
+ { :label => 'default_page_text',
+ :type => 'CmsTag::PageText',
+ :content => 'custom 404 page content' }
+ ]
+ )
+ get :render_html, :cms_path => 'doesnotexist'
+ assert_response 404
+ assert assigns(:cms_page)
+ assert_match /custom 404 page content/, @response.body
+ end
+
def test_render_css
get :render_css, :id => cms_layouts(:default)
assert_response :success
test/integration/authentication_test.rb +0 -1
@@ @@ -24,5 +24,4 @@ class AuthenticationTest < ActionDispatch::IntegrationTest
get '/cms-admin/pages', {}, {'HTTP_AUTHORIZATION' => "Basic #{Base64.encode64('newuser:newpass')}"}
assert_response :success
end
-
end
\ No newline at end of file