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 | |