私はCanCan 'ロール'モデルを持つレールアプリを持っています。役割には「名前」フィールドがあり、ユーザーの権限レベルを判断するために呼び出すことができます。Factory_Girl&CanCan:一意性エラーを避ける
ファクトリーガールでは、「ロール」フィールドに関連するモデルがたくさんあります。深いいくつかの反復。例:( 'account'ファクトリは 'user'ファクトリと関連している 'purchase'ファクトリと関連していますが、 'role'との関連があります)
問題は、 'ロール'に関連付けられたファクトリは、呼び出される2番目のロールは、そのロール - > '名前'フィールドでの一意性検証に失敗します。通常、一意性の検証は問題ではありません。問題のある属性をシーケンスに設定しただけですが、ここではできません。役割の名前はcancanの機能に特有のものでなければなりません。
これはどうすれば回避できますか?
返信をお待ちしています。潜在的にはい、しかし多くの工場は深く入れ子になっています。たとえば、「登録」ファクトリを作成する場合は、ロールファクトリを作成してから、ロールセットを設定したユーザーファクトリを作成してから、そのユーザーセットを含む購入ファクトリを作成してから、その購入の登録を行う必要がありますセット。 – PlankTon
Hm、ロールのリストがあれば、ロールが作成されるとリストから '.pop'するとどうなるでしょうか?あるいは、重複を避けるために(工場で)必要なときに関連する役割を返す 'Factories.rb'にメソッド(ファクトリーではありません)を書くだけならどうでしょうか? – jefflunt
ここに記載されているような解決策(http://stackoverflow.com/a/7213281/241232)は、おそらくニーズに合っています。唯一の問題は、ロールを必要とする新しいファクトリを定義するときに、そのメソッドを使用することを開発者が覚えておくことです。 – BBonifield