Senthil Kumar Bhaskaran Senthil Kumar Bhaskaran - 24 days ago 6
Ruby Question

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?

Answer

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

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