diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-01-16 19:47:58 +0000 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-01-16 13:43:53 -0800 |
commit | f1a15c2197d5da8e0c38bd59aa19973c9cfc0a01 (patch) | |
tree | a492aca08aa10e5e74dabaa168f44a19b48a61d2 | |
parent | 115eedbb410c52364e3353266316c218a29e5998 (diff) | |
download | rails-f1a15c2197d5da8e0c38bd59aa19973c9cfc0a01.tar.gz rails-f1a15c2197d5da8e0c38bd59aa19973c9cfc0a01.tar.bz2 rails-f1a15c2197d5da8e0c38bd59aa19973c9cfc0a01.zip |
Abstract a bit more into SingularAssociation
3 files changed, 8 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/associations/belongs_to_association.rb b/activerecord/lib/active_record/associations/belongs_to_association.rb index 11e16de738..271112bbe1 100644 --- a/activerecord/lib/active_record/associations/belongs_to_association.rb +++ b/activerecord/lib/active_record/associations/belongs_to_association.rb @@ -3,8 +3,7 @@ module ActiveRecord module Associations class BelongsToAssociation < SingularAssociation #:nodoc: def replace(record) - record = record.target if AssociationProxy === record - raise_on_type_mismatch(record) if record + record = check_record(record) update_counters(record) replace_keys(record) diff --git a/activerecord/lib/active_record/associations/has_one_association.rb b/activerecord/lib/active_record/associations/has_one_association.rb index 1b366b74b6..892a8b5bfb 100644 --- a/activerecord/lib/active_record/associations/has_one_association.rb +++ b/activerecord/lib/active_record/associations/has_one_association.rb @@ -3,8 +3,7 @@ module ActiveRecord module Associations class HasOneAssociation < SingularAssociation #:nodoc: def replace(record, save = true) - record = record.target if AssociationProxy === record - raise_on_type_mismatch(record) unless record.nil? + record = check_record(record) load_target @reflection.klass.transaction do diff --git a/activerecord/lib/active_record/associations/singular_association.rb b/activerecord/lib/active_record/associations/singular_association.rb index 023f7caf68..4b457bd881 100644 --- a/activerecord/lib/active_record/associations/singular_association.rb +++ b/activerecord/lib/active_record/associations/singular_association.rb @@ -26,6 +26,12 @@ module ActiveRecord def set_new_record(record) replace(record) end + + def check_record(record) + record = record.target if AssociationProxy === record + raise_on_type_mismatch(record) if record + record + end end end end |