Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between build and new on Rails?

Can anyone tell me what is the difference between build and new command on Rails?

like image 349
Senthil Kumar Bhaskaran Avatar asked Aug 10 '09 06:08

Senthil Kumar Bhaskaran


2 Answers

new is for a new instance of a specific model:

foo = Foo.new 

build is for creating a new instance within an AR association:

bar = foo.build_bar  # (has_one or belongs_to) 

or

bar = foo.bars.build # (has\_many, habtm or has_many :through) 

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Update

Per @toklands's suggestion, build and new are aliases as defined in ActiveRecord::Relation:

So if class Foo has_many Bars, the following have identical effects:

  • foo.bars.new <=> foo.bars.build
  • Bar.where(:foo_id=>foo.id).new <=> Bar.where(:foo_id=>foo.id).build

And if !foo.new_record?

  • foo.bars.new <=> Bar.where(:foo_id=>foo.id).new
like image 81
klochner Avatar answered Sep 17 '22 03:09

klochner


New and build are same as per the documentation https://github.com/rails/rails/blob/master/activerecord/lib/active_record/relation.rb

like image 45
Sabyasachi Ghosh Avatar answered Sep 17 '22 03:09

Sabyasachi Ghosh