Senthil Kumar Bhaskaran Senthil Kumar Bhaskaran - 10 months ago 56
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 Source

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