2

Ruby on Rails アプリケーションの RSpec を使用していくつかのテストを書いていますが、理解できない問題に直面しています。他のオブジェクトに関連付けられているオブジェクトがたくさんあり、Factory Girl を使用してそれらすべてを作成しています。私が問題を抱えている場所の例を次に示します。

    user = Factory.create(:user)
    package = Factory.build(:package, :user => user)
    item = Factory.create(:item, :package => package)

すべてのパッケージはユーザーに属しているため、最初の依存関係はかなり簡単です。ユーザーを作成し、それをパッケージに関連付けます。問題ありません。ここで問題です。私のパッケージ モデルには、パッケージ内に少なくとも 1 つのアイテムがないと作成できないという検証があります。つまり、Factory.create を使用できないということです。これは、packages_controller.rb で @Package.new を実行するのとほとんど同じですが、これで問題ありません。その後、アイテムの作成に進みますが、問題は、パッケージがまだ ID を持っていないため、このアイテムをパッケージに関連付けることができないことです。

パッケージを作成し、アイテムを作成して保存し、パッケージに ID があれば、2 つを関連付けることはできますか?

4

3 に答える 3

2

協会をチェックしてください:

http://github.com/thoughtbot/factory_girl

関連付けられたインスタンスは、レイジー属性を定義するときに関連付けメソッドを使用して生成できます。

Factory.define :post do |p|
  # ...
  p.author {|author| author.association(:user, :last_name
     'Writely') }   end

そうすれば、必要な関連アイテムを自動的に作成できます。

次のようなものが必要になります。

Factory.define :package do |fac|
  fac.association :item  
end 

これにより、ファクトリという名前のアイテムが検索され、item=関係に割り当てられます。

于 2010-09-24T04:11:46.910 に答える
0

検証は相互に排他的です。

私のパッケージモデルには、パッケージに少なくとも1つのアイテムがないと作成できないという検証があります

と:

(1)パッケージを作成し、(2)アイテムを作成して保存し、(3)パッケージにIDが設定されたら、2つを関連付けますか?

IDを取得するには、パッケージの作成を許可する必要があります。空のパッケージの何が無効ですか?おそらく、それがそれ以上使用されないようにする他のロジックが必要ですが、それを埋める前にパッケージを作成できるはずです。

于 2010-09-24T04:26:59.637 に答える