Changeset 7511
- Timestamp:
- 09/18/07 10:26:56 (1 year ago)
- Files:
-
- trunk/activerecord/lib/active_record/associations/association_collection.rb (modified) (3 diffs)
- trunk/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb (modified) (3 diffs)
- trunk/activerecord/test/associations_test.rb (modified) (2 diffs)
- trunk/activerecord/test/validations_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activerecord/lib/active_record/associations/association_collection.rb
r7368 r7511 86 86 87 87 def create(attrs = {}) 88 ensure_owner_is_not_new 88 89 record = @reflection.klass.send(:with_scope, :create => construct_scope[:create]) { @reflection.klass.create(attrs) } 89 90 @target ||= [] unless loaded? … … 93 94 94 95 def create!(attrs = {}) 96 ensure_owner_is_not_new 95 97 record = @reflection.klass.send(:with_scope, :create => construct_scope[:create]) { @reflection.klass.create!(attrs) } 96 98 @target ||= [] unless loaded? … … 207 209 full_callback_name = "#{callback_name}_for_#{@reflection.name}" 208 210 @owner.class.read_inheritable_attribute(full_callback_name.to_sym) || [] 209 end 211 end 212 213 def ensure_owner_is_not_new 214 if @owner.new_record? 215 raise ActiveRecord::RecordNotSaved, "You cannot call create unless the parent is saved" 216 end 217 end 218 210 219 end 211 220 end trunk/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb
r7368 r7511 16 16 def create(attributes = {}) 17 17 # Can't use Base.create because the foreign key may be a protected attribute. 18 ensure_owner_is_not_new 18 19 if attributes.is_a?(Array) 19 20 attributes.collect { |attr| create(attr) } … … 23 24 record 24 25 end 26 end 27 28 def create!(attributes = {}) 29 # Can't use Base.create! because the foreign key may be a protected attribute. 30 ensure_owner_is_not_new 31 if attributes.is_a?(Array) 32 attributes.collect { |attr| create(attr) } 33 else 34 record = build(attributes) 35 insert_record(record, true) unless @owner.new_record? 36 record 37 end 25 38 end 26 39 … … 76 89 end 77 90 78 def insert_record(record )91 def insert_record(record, force=true) 79 92 if record.new_record? 80 return false unless record.save 93 if force 94 record.save! 95 else 96 return false unless record.save 97 end 81 98 end 82 99 trunk/activerecord/test/associations_test.rb
r7477 r7511 577 577 assert_equal 3, first_firm.plain_clients.size 578 578 end 579 580 def test_create_with_bang_on_has_many_when_parent_is_new_raises 581 assert_raises(ActiveRecord::RecordNotSaved) do 582 firm = Firm.new 583 firm.plain_clients.create! :name=>"Whoever" 584 end 585 end 586 587 def test_regular_create_on_has_many_when_parent_is_new_raises 588 assert_raises(ActiveRecord::RecordNotSaved) do 589 firm = Firm.new 590 firm.plain_clients.create :name=>"Whoever" 591 end 592 end 593 594 def test_create_with_bang_on_habtm_when_parent_is_new_raises 595 assert_raises(ActiveRecord::RecordNotSaved) do 596 Developer.new("name" => "Aredridel").projects.create! 597 end 598 end 579 599 580 600 def test_adding_a_mismatch_class … … 1541 1561 def test_create_by_new_record 1542 1562 devel = Developer.new(:name => "Marcel", :salary => 75000) 1543 proj1 = devel.projects. create(:name => "Make bed")1544 proj2 = devel.projects. create(:name => "Lie in it")1563 proj1 = devel.projects.build(:name => "Make bed") 1564 proj2 = devel.projects.build(:name => "Lie in it") 1545 1565 assert_equal devel.projects.last, proj2 1546 1566 assert proj2.new_record? trunk/activerecord/test/validations_test.rb
r7407 r7511 676 676 assert !t.save 677 677 assert t.errors.on(:replies) 678 t.replies.create('title' => 'areply', 'content' => 'whateveragain')678 reply = t.replies.build('title' => 'areply', 'content' => 'whateveragain') 679 679 assert t.valid? 680 680 end … … 881 881 assert !t.save 882 882 assert t.errors.on(:replies) 883 t.replies. create('title' => 'ããããã', 'content' => 'ããããã')883 t.replies.build('title' => 'ããããã', 'content' => 'ããããã') 884 884 assert t.valid? 885 885 end