diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-07-08 20:59:25 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2011-07-08 21:03:54 +0100 |
commit | dfec3737b05d22e6f298bcae0a8948a4b8803ebd (patch) | |
tree | a84c0a5ac3b23ece8eb51c1c1ac831ad5fb78193 /activerecord/lib/active_record/associations | |
parent | c1c886a0c44c8b13a4f23927d84eda74565eaca8 (diff) | |
download | rails-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/associations')
-rw-r--r-- | activerecord/lib/active_record/associations/singular_association.rb | 13 |
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 |