What is the difference between build and new on Rails?

前端 未结 5 1571
無奈伤痛
無奈伤痛 2020-12-02 09:11

Can anyone tell me what is the difference between build and new command on Rails?

5条回答
  •  旧时难觅i
    2020-12-02 09:57

    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

提交回复
热议问题