【问题标题】:Creating three different models through a single resource in rails?通过 Rails 中的单一资源创建三个不同的模型?
【发布时间】:2013-02-22 16:31:27
【问题描述】:

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

  • 车库管理员
  • 超级管理员
  • 车库
  • 注册车库

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

  • 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 中使用 before_save :garage 时,我收到错误 SystemStackError: stack level too deep

如果我以正确的方式做事,谁能指导我,并指导我如何实施。

我正在使用 mongoid。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢 PinnyM 不知道我怎么错过了。
    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多