aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2011-07-08 20:59:25 +0100
committerJon Leighton <j@jonathanleighton.com>2011-07-08 21:03:54 +0100
commitdfec3737b05d22e6f298bcae0a8948a4b8803ebd (patch)
treea84c0a5ac3b23ece8eb51c1c1ac831ad5fb78193 /activerecord/lib/active_record
parentc1c886a0c44c8b13a4f23927d84eda74565eaca8 (diff)
downloadrails-dfec3737b05d22e6f298bcae0a8948a4b8803ebd.tar.gz
rails-dfec3737b05d22e6f298bcae0a8948a4b8803ebd.tar.bz2
rails-dfec3737b05d22e6f298bcae0a8948a4b8803ebd.zip
Ensure that the foreign key gets set when doing record.create_association or record.create_association. Fixes #1960.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/associations/singular_association.rb13
1 files changed, 11 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/singular_association.rb b/activerecord/lib/active_record/associations/singular_association.rb
index 6b010064d5..a1a921bcb4 100644
--- a/activerecord/lib/active_record/associations/singular_association.rb
+++ b/activerecord/lib/active_record/associations/singular_association.rb
@@ -18,11 +18,11 @@ module ActiveRecord
end
def create(attributes = {}, options = {}, &block)
- build(attributes, options, &block).tap { |record| record.save }
+ create_record(attributes, options, &block)
end
def create!(attributes = {}, options = {}, &block)
- build(attributes, options, &block).tap { |record| record.save! }
+ create_record(attributes, options, true, &block)
end
def build(attributes = {}, options = {})
@@ -50,6 +50,15 @@ module ActiveRecord
def set_new_record(record)
replace(record)
end
+
+ def create_record(attributes, options, raise_error = false)
+ record = build_record(attributes, options)
+ yield(record) if block_given?
+ saved = record.save
+ set_new_record(record)
+ raise RecordInvalid.new(record) if !saved && raise_error
+ record
+ end
end
end
end