Подтвердить что ты не робот

В чем разница между сборкой и новой версией Rails?

Может ли кто-нибудь сказать мне, в чем разница между сборкой и новой командой в Rails?

4b9b3361

Ответ 1

new для нового экземпляра конкретной модели:

foo = Foo.new

build предназначен для создания нового экземпляра в AR-ассоциации:

bar = foo.build_bar  # (has_one or belongs_to)

или

bar = foo.bars.build # (has\_many, habtm or has_many :through)

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Обновление

Per @toklands предложение, сборка и новые - это псевдонимы, как определено в ActiveRecord:: Relation:

Итак, если класс Foo has_many Bars, следующие имеют одинаковые эффекты:

  • foo.bars.new <= > foo.bars.build
  • Bar.where(:foo_id=>foo.id).new <= > Bar.where(:foo_id=>foo.id).build

И если !foo.new_record?

  • foo.bars.new <= > Bar.where(:foo_id=>foo.id).new

Ответ 3

До рельсов 2.2 вам понадобилось построить для has_many/has_and_belongs_to_many часть отношения, чтобы новая запись автоматически установила внешние ключи. Например:

user.timesheets.build

установит внешний ключ. Я думаю, что для рельсов 2.2 и далее новые и строить делают то же самое для has_many и has_and_belongs_to_many отношений.

Ответ 4

Я заметил разницу между .build и .new при использовании их для создания объекта 'dummy' для формы представления, используя использование вложенного ресурса.

.build создает parent_id .new не

Пример вложенного ресурса: @list.items(где Item вложен в список)

@list.items.build ... создает объект со всеми значениями nil EXCEPT для list_id.

Item.new создает новый объект item со всеми значениями nil.

Он появился на моей странице "show" при повторении по списку @list.items Не проблема, пока мне не понадобился @list.items далее на той же странице "показать" в другой форме, где итерация в @list.items открыла элемент (тот, который был создан .build), который имел связанный list_id, но ничего больше.

Некоторые примеры выходов ниже...

@list.items.build = > #


2.2.3: 002 > Item.all.build  = > #


2.2.3: 003 > Item.new  = > # 2.2.3: 004 >

Ответ 5

Было время, когда сборка заполнила вызывающего абонента новым экземпляром, но новый - нет. Прямо сейчас из Rails 4 и новые, и сборщики заполняют вызывающего абонента новым экземпляром. Просто играйте в консоли, если хотите получить представление.