Rails has_many:通过关系导致堆栈级别太深

时间:2015-03-17 15:35:29

标签: mysql ruby-on-rails activerecord

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

当我尝试点击任何用户或案例端点时,它会不断向DB发送查询,如:

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行),但我已经注释掉了,并认为这是造成问题/错误的原因。此外,它在崩溃时运行这些查询,这让我相信它来自这种关系。

1 个答案:

答案 0 :(得分:0)

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

我的序列化程序中有has_many :users个案例,导致错误。