1

UserTeacherの2 つのモデルがあります。TeacherはUserに属し、UserにはTeacherがあります。

だから、私はファクトリーガールの宝石を使います:

Factory.define :user do |user|
  user.user_login "Another User"
  user.user_role "admin"
  user.password "foobar"
end

Factory.sequence :user_login do |n|
  "person-#{n}"
end

Factory.define :teacher do |teacher|
  ...
  teacher.user                                                                            
end

問題に遭遇しましたが、それを解決する方法がわかりません。工場経由でユーザーを作成すると、簡単に書くことができます:

@user = Factory( :user, :user_login => Factory.next(:user_login)  ) 

これにより、一意のログインを持つユーザーが作成されます。

どうすれば先生に同じことをすることができますか? 私はそれを試しました:

@teacher = Factory( :teacher, :user_login => Factory.next(:user_login)  ) 

そして、それは機能しません。

4

2 に答える 2

2

シーケンスを個別に指定して別のファクトリに渡す必要はありません。次のようにファクトリ内で使用できます。

Factory.define :user do |user|
  # ...
  user.sequence(:user_login) { |n| "person=#{n}" }
end

またはそれより短い

Factory.define :user do
  # ...
  sequence(:user_login) { |n| "person=#{n}" }
end

次に、ユーザーを教師に関連付けます。

Factory.define :teacher do
  association :user
end

その後、あなたはただ呼び出すことができます

@teacher = Factory(:teacher)

これにより、シーケンス内の次の user_login で関連付けられたユーザーが自動的に作成されます。

于 2012-04-07T13:32:37.343 に答える
0

私はそれを解決しました。

@teacher = Factory( :teacher, 
                    :user => Factory(:user, :user_login => Factory.next(:user_login)) )
于 2012-04-07T13:19:20.767 に答える