diff options
Diffstat (limited to 'activerecord/lib/active_record/associations/singular_association.rb')
-rw-r--r-- | activerecord/lib/active_record/associations/singular_association.rb | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/associations/singular_association.rb b/activerecord/lib/active_record/associations/singular_association.rb index ea4d73d414..877ddf3ee1 100644 --- a/activerecord/lib/active_record/associations/singular_association.rb +++ b/activerecord/lib/active_record/associations/singular_association.rb @@ -18,7 +18,7 @@ module ActiveRecord end def create(attributes = {}, options = {}) - new_record(:create, attributes, options) + build(attributes, options).tap { |record| record.save } end def create!(attributes = {}, options = {}) @@ -26,7 +26,14 @@ module ActiveRecord end def build(attributes = {}, options = {}) - new_record(:build, attributes, options) + record = reflection.build_association + record.assign_attributes( + scoped.scope_for_create.except(klass.primary_key), + :without_protection => true + ) + record.assign_attributes(attributes, options) + set_new_record(record) + record end private @@ -43,13 +50,6 @@ module ActiveRecord def set_new_record(record) replace(record) end - - def new_record(method, attributes, options) - attributes = scoped.scope_for_create.merge(attributes || {}) - record = reflection.send("#{method}_association", attributes, options) - set_new_record(record) - record - end end end end |