From 005371e16cf214509bb988dcf5d0eef3ee23157d Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 1 Dec 2004 13:59:16 +0000 Subject: Added options to tailor header tag, div id, and div class on ActiveRecordHelper#error_messages_for [josh] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@41 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ .../action_view/helpers/active_record_helper.rb | 24 +++++++++++++++------- .../test/template/active_record_helper_test.rb | 19 ++++++++++++++++- 3 files changed, 37 insertions(+), 8 deletions(-) (limited to 'actionpack') diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index e48b117bc7..d4cfc6edfa 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added options to tailor header tag, div id, and div class on ActiveRecordHelper#error_messages_for [josh] + * Added graceful handling of non-alphanumeric names and misplaced brackets in input parameters [bitsweat] * Added a new container for cookies that makes them more intuative to use. The old methods of cookie and @cookies have been deprecated. diff --git a/actionpack/lib/action_view/helpers/active_record_helper.rb b/actionpack/lib/action_view/helpers/active_record_helper.rb index b02b807fe1..de18696992 100644 --- a/actionpack/lib/action_view/helpers/active_record_helper.rb +++ b/actionpack/lib/action_view/helpers/active_record_helper.rb @@ -76,14 +76,24 @@ module ActionView end end - def error_messages_for(object_name) - object = instance_eval("@#{object_name}") + # Returns a string with a div containing all the error messages for the object located as an instance variable by the name + # of object_name. This div can be tailored by the following options: + # + # ::header_tag: Used for the header of the error div (default: h2) + # ::id: The id of the error div (default: errorExplanation) + # ::class: The class of the error div (default: errorExplanation) + def error_messages_for(object_name, options={}) + object = instance_eval "@#{object_name}" unless object.errors.empty? - "
" + - "

#{object.errors.count} error#{"s" unless object.errors.count == 1} prohibited this #{object_name.gsub("_", " ")} from being saved

" + - "

There were problems with the following fields (marked in red below):

" + - "" + - "
" + content_tag("div", + content_tag( + options[:header_tag] || "h2", + "#{pluralize(object.errors.count, "error")} prohibited this #{object_name.gsub("_", " ")} from being saved" + ) + + content_tag("p", "There were problems with the following fields:") + + content_tag("ul", object.errors.full_messages.collect { |msg| content_tag("li", msg) }), + "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation" + ) end end diff --git a/actionpack/test/template/active_record_helper_test.rb b/actionpack/test/template/active_record_helper_test.rb index 4b32f4dd48..68344e1222 100644 --- a/actionpack/test/template/active_record_helper_test.rb +++ b/actionpack/test/template/active_record_helper_test.rb @@ -1,18 +1,30 @@ require 'test/unit' require File.dirname(__FILE__) + '/../../lib/action_view/helpers/date_helper' require File.dirname(__FILE__) + '/../../lib/action_view/helpers/form_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/text_helper' +require File.dirname(__FILE__) + '/../../lib/action_view/helpers/tag_helper' # require File.dirname(__FILE__) + '/../../lib/action_view/helpers/active_record_helper' class ActiveRecordHelperTest < Test::Unit::TestCase include ActionView::Helpers::FormHelper include ActionView::Helpers::ActiveRecordHelper + include ActionView::Helpers::TextHelper + include ActionView::Helpers::TagHelper Post = Struct.new("Post", :title, :author_name, :body, :secret, :written_on) Column = Struct.new("Column", :type, :name, :human_name) def setup @post = Post.new - def @post.errors() Class.new{ def on(field) field == "author_name" || field == "body" end }.new end + def @post.errors + Class.new { + def on(field) field == "author_name" || field == "body" end + def empty?() false end + def count() 1 end + def full_messages() [ "Author name can't be empty" ] end + }.new + end + def @post.new_record?() true end def @post.column_for_attribute(attr_name) @@ -73,4 +85,9 @@ class ActiveRecordHelperTest < Test::Unit::TestCase form("post") ) end + + def test_error_for_block + assert_equal "

1 error prohibited this post from being saved

There were problems with the following fields:

", error_messages_for("post") + assert_equal "

1 error prohibited this post from being saved

There were problems with the following fields:

", error_messages_for("post", :class => "errorDeathByClass", :id => "errorDeathById", :header_tag => "h1") + end end \ No newline at end of file -- cgit v1.2.3