2013-02-22 36 views
0

我有我的rails 3.2应用程序中的以下4个资源。通过rails中的单个资源创建三个不同的模型?

  • GarageAdmin
  • 超级管理员
  • 车库
  • RegisterGarage

现在我的应用程序的一部分,有这样的工作,

  • 的超级管理员可以通过创建GarageAdmin资源RegisterGarage。
  • A GarageAdmin has_one Garage and a Garage belongs_to GarageAdmin。
  • RegisterGarage为管理员使用存储一些其他信息。

    现在我想要完成的是,当SuperAdmin创建一个GarageAdmin时,对应于该GarageAdmin的车库也将通过该RegisterGarage资源同时创建。

我打电话的RegisterGarage资源两个回调:

  • before_create :pass。这将生成一个随机密码为GarageAdmin
  • before_save :garage。这将为刚创建的GarageAdmin创建一个新的Garage并为其分配一个名称。

直到现在,我能够创建一个GarageAdmin,如果我删除before_save :garage。但是当我在RegisterGarage中使用before_save :garage时,出现错误SystemStackError: stack level too deep

任何人都可以引导我,如果我正确的做法,也指导我如何实现。

我正在使用mongoid。

回答

1

协会名称为​​,您的回调也被命名为​​。这意味着(假设回调在关联后列在模型中),每次尝试引用​​关联时,实际上都在调用回调方法 - 这可能是导致错误的原因。

尝试将您的回调改为与init_password,init_garage不同(更具描述性)的内容。另外,如果只在首次创建GarageAdmin时才创建新的Garage,则应该是before_create回调,而不是before_save。否则,每次更新GarageAdmin时都会创建一个新的Garage。

+0

感谢PinnyM非常不知道我是如何错过的。 – archit2u 2013-02-23 04:54:14

相关问题