8

「Foo::Bar」のような名前空間を持つクラスの Fabricator を定義したいと思います。
うまくいく方法を教えてください。

ここに私のコード。

モデル/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

parino コンソールで Fabricatior オブジェクトを作成しようとしたときにエラーが発生しました。

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

'User' のような名前空間クラスではない別の Fabricator オブジェクトを作成しようとすると、うまくいきました。

4

2 に答える 2

6

オブジェクトの作成に関する製作のドキュメントによると:

クラスとは異なる名前を使用するにはfrom: :symbolized_class_name、2 番目の引数として指定する必要があります。

したがって、次のように動作するはずです。

Fabricator(:foo_bar, from: 'Foo::Bar') do
  yyy 'MyString'
  zzz 'MyString'
end
于 2013-10-04T19:36:00.280 に答える
2

これは私のために働いた

Fabricator(:foo_bar, class_name: :'Foo::Bar') do
    xxx {Faker::Company.name}
    yyy 'Mystring'
end
于 2013-03-09T10:13:28.143 に答える