【问题标题】:Rails has many :through relationship causing stack level too deepRails 有很多 :through 关系导致堆栈级别太深
【发布时间】:2015-03-17 15:35:29
【问题描述】:
class User < ActiveRecord::Base
  has_many :case_users
  has_many :cases, :through => :case_users
end

class CaseUser < ActiveRecord::Base
  belongs_to :case
  belongs_to :user
end

class Case < ActiveRecord::Base
  has_many :case_users
  has_many :users, :through => :case_users
end

当我尝试访问任何用户或案例端点时,它会不断向数据库发送查询,例如:

SELECT `cases`.* FROM `cases` INNER JOIN `case_users` ON `cases`.`id` = `case_users`.`case_id` WHERE `cases`.`deleted_at` IS NULL AND `case_users`.`deleted_at` IS NULL AND `case_users`.`user_id` = 1  [["user_id", 1]]

喜欢:

SELECT `users`.* FROM `users` INNER JOIN `case_users` ON `users`.`id` = `case_users`.`user_id` WHERE `users`.`deleted_at` IS NULL AND `case_users`.`deleted_at` IS NULL AND `case_users`.`case_id` = 1  [["case_id", 1]]

为什么会这样?

编辑:

这些模型实际上要大得多(80-100 行),但我已经注释掉了一些内容,并认为这是导致问题/错误的原因。它还在崩溃时运行这些查询,这让我相信它来自这种关系。

【问题讨论】:

标签: mysql ruby-on-rails activerecord


【解决方案1】:

在花了大约 1 小时查看我的模型、我的数据库架构并进行了全面测试后,我发现这是我的序列化程序中的一个问题。

我的序列化程序中有 has_many :users 用于案例,这导致了错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2017-08-19
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多