読者です 読者をやめる 読者になる 読者になる

railsのnewとbuildの違い

rails

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

user = User.first
user.comments.new
=> #<Comment id: nil, body: nil, user_id: 1, created_at: nil, updated_at: nil>
irb(main):005:0> 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をエイリアスにしている

こんな感じです。

以上です。