aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorAlexey Kovyrin <alexey@kovyrin.net>2009-09-12 14:55:34 +0200
committerEloy Duran <eloy.de.enige@gmail.com>2009-09-12 16:04:36 +0200
commit938c0ee0455b8e784a771ce31631d9ec376ee6ab (patch)
tree22141b1db8c00aac3455f2ec5adbe6fa5227eacd /activerecord/lib
parent580ec0dccde075330abe68eb13badb03b225f9b4 (diff)
downloadrails-938c0ee0455b8e784a771ce31631d9ec376ee6ab.tar.gz
rails-938c0ee0455b8e784a771ce31631d9ec376ee6ab.tar.bz2
rails-938c0ee0455b8e784a771ce31631d9ec376ee6ab.zip
Define autosave association validation methods only when needed. [#3161 state:resolved]
Signed-off-by: Eloy Duran <eloy.de.enige@gmail.com>
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/autosave_association.rb13
1 files changed, 10 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/autosave_association.rb b/activerecord/lib/active_record/autosave_association.rb
index bfae5933ea..7b5bd33863 100644
--- a/activerecord/lib/active_record/autosave_association.rb
+++ b/activerecord/lib/active_record/autosave_association.rb
@@ -158,7 +158,7 @@ module ActiveRecord
def add_autosave_association_callbacks(reflection)
save_method = "autosave_associated_records_for_#{reflection.name}"
validation_method = "validate_associated_records_for_#{reflection.name}"
- validate validation_method
+ force_validation = (reflection.options[:validate] == true || reflection.options[:autosave] == true)
case reflection.macro
when :has_many, :has_and_belongs_to_many
@@ -169,7 +169,10 @@ module ActiveRecord
after_create save_method
after_update save_method
- define_method(validation_method) { validate_collection_association(reflection) }
+ if force_validation || (reflection.macro == :has_many && reflection.options[:validate] != false)
+ define_method(validation_method) { validate_collection_association(reflection) }
+ validate validation_method
+ end
else
case reflection.macro
when :has_one
@@ -179,7 +182,11 @@ module ActiveRecord
define_method(save_method) { save_belongs_to_association(reflection) }
before_save save_method
end
- define_method(validation_method) { validate_single_association(reflection) }
+
+ if force_validation
+ define_method(validation_method) { validate_single_association(reflection) }
+ validate validation_method
+ end
end
end
end