Как определить Fabricator для класса пространства имен

Я хочу определить Fabricator для класса с таким пространством имен, как 'Foo::Bar'.
Расскажите мне, как это может работать.

Вот мои коды.

модели /foo.rb

class Foo
  include Mongoid::Document
  embedded_in :foo_container, polymorphic: true

  field :xxx ....
end

модели/foo/bar.rb

class Foo::Bar < Foo
  field :yyy ....
  field :zzz ....
end

данные/фабрикаторы/foo_bar_fabricator.rb

Fabricator(:foo_bar, class_name: 'Foo::Bar') do
   yyy 'MyString'
   zzz 'MyString'
end

Когда я попытался создать объект Fabricator на консоли parino, произошла ошибка.

> Fabricate(:foo_bar)
> NoMethodError: undefined method `new?' for nil:NilClass
  .... stack messages

Когда я попытался создать другой объект Fabricator, который не был классом пространства имен, таким как «Пользователь», все прошло правильно.


person utwang    schedule 30.01.2013    source источник


Ответы (2)


Согласно документации Fabrication по созданию объектов:

Чтобы использовать имя, отличное от класса, вы должны указать from: :symbolized_class_name в качестве второго аргумента.

Итак, должно работать следующее:

Fabricator(:foo_bar, from: 'Foo::Bar') do
  yyy 'MyString'
  zzz 'MyString'
end
person Cameron Pope    schedule 04.10.2013

Это сработало для меня

Fabricator(:foo_bar, class_name: :'Foo::Bar') do
    xxx {Faker::Company.name}
    yyy 'Mystring'
end
person toxaq    schedule 09.03.2013