Вот полный пример, который работает вне рельсов в irb.Однако вы должны установить правильные гемы.
Создайте таблицы в sqlite:
sqlite3 /tmp/development.db
> create table foos ( id int, name varchar(50), primary key(id));
> create table bars ( id int, name varchar(50), foo_id int, primary key(id));
Обратите внимание, что это синтаксис factory_girl 3.x.
require 'factory_girl'
require 'active_record'
require 'active_support'
ActiveRecord::Base.establish_connection(
:adapter => 'sqlite3', :database => '/tmp/development.db'
)
class Foo < ActiveRecord::Base
attr_accessible :id, :name
has_one :bar
end
class Bar < ActiveRecord::Base
attr_accessible :id, :name
belongs_to :foo
end
FactoryGirl.define do
factory :foo do
sequence :id do |n|
n
end
name "Foo Name" # use Faker
end
end
FactoryGirl.define do
factory :bar do
sequence(:id) {|n| n }
association :foo, :factory => :foo
name "Bar Name" # use Faker
end
end
bar = FactoryGirl.build(:bar)
puts bar.inspect
# => #<Bar id: 1, name: "Bar Name", foo_id: 1>
Вы заметите, что вы можете запустить это только один раз, потому что мы не откатываем наши таблицы после этого запуска.Это потому, что factory_girl выяснил, что необходима ассоциация, и записал записи в БД, хотя все, что мы сделали, это build
вызов.Обычно build
не записывает в БД.Вы можете выполнить откат вручную:
> delete from foos;
> delete from bars;
Извините за очень неряшливый пример, но, по крайней мере, вы можете играть с этим на стороне, не связываясь с вашим проектом.