2013-12-21 3 views
0

Я просто не знаю, для чего они предназначены. До того, как я подумал, что они легко заполняют иностранные ключи, но теперь я вижу, что это не так.В чем смысл вложенных заводов?

# User attributes: id, name, password 
factory :user_0, class: User do 
    id 0 
    name "Jimmy" 
    password "Jimson" 
end 

# Status attributes: id, user_id, content 
factory :user_0_statuses, class: Status do 
    association :user, factory: :user_0 

    factory :user_0_status_0 do 
     id 0 
     content "noo" 
    end 
    factory :user_0_status_1 do 
     id 1 
     content "yees" 
    end 
end 

Когда: user_0_status_0 и: user_0_status_1 заводы .create d в спецификации, я думал, что эта установка завод создаст следующую информацию в базе данных (обратите внимание на статус user_id записей.):

users  
id | name | password 
0 | Jimmy | Jimson 

statuses 
id | user_id | content 
0 | 0  | noo 
1 | 0  | yees 

Но вместо этого он создает это:

users  
id | name | password 
0 | Jimmy | Jimson 
0 | Jimmy | Jimson 

statuses 
id | user_id | content 
0 | nil  | noo 
1 | nil  | yees 

в принципе, новый пользователь на основе user_0 фабрики создается для каждого вложенного завода статуса и user_ id статуса не установлен вообще. Как это поведение полезно?

Я просто не вижу никакого использования в отношении вложенных заводов. Для чего они и метод ассоциации?

+0

Пожалуйста, используйте значимые имена переменных вместо 'user_0_something', трудно понять ваши намерения. –

+0

Я ничего не тестирую, все, о чем я забочусь в этом вопросе, - это влияние вложенных таблиц на созданные элементы временной базы данных. – Starkers

+0

Я знаю, что ты что-то не испытываешь. Мне просто сложно понять вопрос с такими именами переменных, я не знаю, для чего они нужны. –

ответ

0

Когда завод вложен в другое определение фабрики, он наследует атрибуты, определенные на родительском заводе. Если у вас есть фабрика User, вы можете в ней встроить фабрику «admin_user», которая будет иметь все базовые характеристики пользователя плюс все, что делает пользователя администратором, без необходимости переопределять базовые атрибуты дважды.

(немного не связаны:. Я не уверен, если установка первичного ключа (это положение является класс ActiveRecord) является надежной практикой, и я бы посоветовал найти другой способ решить эту проблему)