2013-12-12 3 views
0

У меня есть следующий завод:Ассоциированный с одной модели на Factory Girl

FactoryGirl.define do 
    sequence :api_name do |n| 
    "API_License_Name_#{n}" 
    end 

    factory :api_license do 
    name { FactoryGirl.generate(:api_name) } 
    description "Desc" 
    end 
end 

Но на двух конкретных заводов я следующее:

FactoryGirl.define do 
    factory :scope_permission do 
     permission 
     action 
    end 
end 

«Разрешение» и «Действие» являются заводы которые связаны с api_license. Например:

FactoryGirl.define do 
    factory :action do 
    name "My Action" 
    api_license 
    end 
end 

Проблема заключается в том, что разрешение и действие быть связаны с различными api_licenses (два из них создаются).

Что я могу сделать, чтобы связать их с одной и той же лицензией на api?

ответ

0

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

С обратным вызовом вы создадите вторую ассоциацию после завершения фабрики, которая даст вам доступ к параметру первой связанной модели.

Вот документы: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#callbacks

С пользовательского конструктора (может быть необходимо в данном случае), вы можете использовать ignore do блок и создать ассоциацию с объектами вы уже построили. Это будет выглядеть примерно так:

ignore do 
    api_license create(:api_license) 
    permission create(:permission, api_license: api_license) 
    action create(:action, api_license: api_license) 
end 



initialize_with do 
    new(permission: permission, action: action) 
end 

Там более простой пример того, что это не совсем так близко к тому, что вам нужно сделать в Factory Girl ЧЕГО НАЧАТЬ файл: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#custom-construction

+0

Я не очень хорошо понимаю. У меня есть один файл на завод. Куда должен идти этот код? – Tony

+0

К сожалению, я не показывал код, который обертывает этот сегмент. Мой фрагмент идет внутри фабрики: scope_permission do/end block, это содержимое вашей фабрики. – geoffharcourt

+0

Я получаю следующую ошибку: definition_proxy.rb: 35: in 'add_attribute ': неправильное количество аргументов (3 для 2) (ArgumentError) – Tony

Смежные вопросы