3

I do not understand this line of a code:

@club = current_user.clubs.build(club_params)

I know that the same code can be created with new method, and then we can save the instance variable, but what does build do in this case?

sawa
  • 165,429
  • 45
  • 277
  • 381
Pujan Soni
  • 155
  • 13
  • 1
    `ActiveRecord::Relation#build` did work slightly differently in early versions of Rails but now `build` is just an alias of `new`. – max Dec 10 '18 at 08:02

3 Answers3

6

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

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
2

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

Akash_Sahu
  • 121
  • 1
  • 3
0

build and new both are almost same but have difference of that build is used when you are using belongs_to in association

In this patient belongs_to user so we used build

belongs_to :user
@patient = current_user.patients.build(patient_params) 
@patient.save