2010-02-03 1 views
3

У меня есть следующие модели:Использование рассола с огурцами и factory_girl создать связанные модели и передавать параметры через к вложенной модели

class User < ActiveRecord::Base 
    has_one :profile, :dependent => :destroy 
    def before_create 
     self.profile ||= Profile.new 
    end 
end 

class Profile < ActiveRecord::Base 
    belongs_to :user 
    validates_uniqueness_of :name 
end 

И у меня есть следующие заводы:

Factory.define :user do |user| 
    user.email     { Factory.next :email } 
    user.association   :profile 
end 

Factory.define :profile do |profile| 
    profile.name 'Name' 
end 

Так что это это моя функция:

Given a profile: "John" exists with name: "John" 
And a user: "John" exists with profile: profile "John" 

Есть ли способ улучшить это? Я хотел бы быть в состоянии написать что-то вроде этого:

Given a user: "John" exists with a profile: profile "John" exists with name: "John" 

И это создает что-то вдоль линий:

Factory(:user, :profile => Factory(:profile, :name)) 

его почти что мне нужно вложенную Искателя. Можете ли вы предложить шаг для этого?

Или вы можете предложить альтернативный способ достижения этого?

+0

Я немного смущен вашими моделями. «Пользователь» не имеет столбца «name», но вы имеете в виду пользователя «Джон» в вашей функции. Означает ли это, что вы проверяете столбец 'name' в соответствующем' Profile'? Может быть, вы могли бы подумать над идеей этого дизайна. – zetetic

+0

Мысль за дизайном заключалась в том, чтобы отделить пользовательский профиль и учетную запись от пользователя, однако огромные проблемы, с которыми я столкнулся при попытке написать тесты для такого дизайна, говорят мне о том, что что-то не так. Я думаю, что было бы разумнее просто сбрасывать все в таблицу пользователей/модель и делать с ней. – ktec

ответ