Posted at

railsのnewとbuildの違い

More than 3 years have passed since last update.

結論からいうと、ありません。

user = User.first

user.comments.new
=> #<Comment id: nil, body: nil, user_id: 1, created_at: nil, updated_at: nil>
user.comments.build
=> #<Comment id: nil, body: nil, user_id: 1, created_at: nil, updated_at: nil>

昔は、newだと上のuser_idが入らなかったみたいですね。

今はどちらも入るようになっています。

そのため、慣習的に関連するモデルを生成するときは、buildを使うようです。

User.new(user_params)

user = User.find(params[:id])

user.comments.build(comment_params)

ちなみにrailsのソースコード(5.1)です。

def build(attributes = {}, &block)

@association.build(attributes, &block)
end
alias_method :new, :build ←むしろnewをエイリアスにしている

こんな感じです。

以上です。