通过rails中的单个资源创建三个不同的模型?

时间:2013-02-22 16:31:27

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 mongoid

我在rails 3.2应用程序中有以下4个资源。

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

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

  • SuperAdmin可以通过资源RegisterGarage创建GarageAdmin。
  • GarageAdmin has_one Garage和Garage belongs_to GarageAdmin。
  • RegisterGarage存储了一些供管理员使用的其他信息。

    现在我要完成的是,当SuperAdmin创建GarageAdmin时,与GarageAdmin对应的Garage也将仅通过该RegisterGarage资源同时创建。

我在RegisterGarage资源中调用了两个回调:

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

直到现在,如果删除before_save :garage,我就可以创建GarageAdmin。但是当我在RegisterGarage中使用SystemStackError: stack level too deep时,我收到错误before_save :garage

如果我以正确的方式做到这一点,任何人都可以指导我,并指导我如何实现它。

我正在使用mongoid。

1 个答案:

答案 0 :(得分:1)

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

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