0

Rails 3.2アプリケーションには、次の4つのリソースがあります。

  • GarageAdmin
  • SuperAdmin
  • ガレージ
  • RegisterGarage

今、私のアプリケーションの一部はこのように機能する必要があります、

  • SuperAdminは、リソースRegisterGarageを介してGarageAdminを作成できます。
  • GarageAdminhas_oneGarageとGaragebelongs_toGarageAdmin。
  • RegisterGarageは、管理者が使用するその他の情報を保存します。

    今私が達成しようとしているのは、SuperAdminがGarageAdminを作成するときに、そのGarageAdminに対応するガレージもそのRegisterGarageリソースを介してのみ同時に作成されるということです。

RegisterGarageリソースで2つのコールバックを呼び出しています。

  • before_create :pass。これにより、GarageAdminのランダムなパスワードが生成されます
  • before_save :garage。これにより、作成したばかりのGarageAdminの新しいガレージが作成され、それに名前が割り当てられます。

今までは、を削除すればGarageAdminを作成できますbefore_save :garage。しかし、RegisterGarageSystemStackError: stack level too deepで使用するとエラーが発生します。before_save :garage

私がそれを正しい方法で行っている場合、誰かが私を導き、またそれを実装する方法を教えてもらえますか?

私はモンゴイドを使用しています。

4

1 に答える 1

1

アソシエーション名はgarage、で、コールバックの名前もgarageです。これは、(コールバックが関連付けの後にモデルにリストされていると仮定して)関連付けを参照しようとするたびにgarage、実際にコールバックメソッドを呼び出していることを意味します。これがエラーの原因である可能性があります。

コールバックを、などの別の(そしてより説明的な)ものに変更してみてinit_passwordくださいinit_garage。また、GarageAdminが最初に作成されたときにのみ新しいガレージを作成する必要がある場合はbefore_create、ではなくコールバックにする必要がありますbefore_save。それ以外の場合、GarageAdminが更新されるたびに新しいガレージが作成されます。

于 2013-02-22T16:34:32.057 に答える