What is the difference between build and new on Rails?

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

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)