Ответ 1
attributes_for
вернет хеш, тогда как build
вернет объект, который не сохраняется.
Учитывая следующее factory:
FactoryGirl.define do
factory :user do
name 'John Doe'
end
end
Вот результат build
:
FactoryGirl.build :user
=> #<User id: nil, name: "John Doe", created_at: nil, updated_at: nil>
и результат attributes_for
FactoryGirl.attributes_for :user
=> {:name=>"John Doe"}
Я нахожу attributes_for
очень полезным для моего функционального теста, так как для создания пользователя я могу сделать что-то вроде следующего:
post :create, user: FactoryGirl.attributes_for(:user)
При использовании build
нам нужно вручную создать хэш атрибутов из экземпляра user
и передать его методу post
, например:
u = FactoryGirl.build :user
post :create, user: u.attributes # This is actually different as it includes all the attributes, in that case updated_at & created_at
Обычно я использую build
и create
, когда мне непосредственно нужны объекты, а не хеш атрибутов
Сообщите мне, если вам нужна дополнительная информация