【问题标题】:has many through, dependent destroy issue有很多通过,依赖破坏问题
【发布时间】:2018-03-21 05:52:49
【问题描述】:

我在依赖销毁功能方面遇到了一些问题。 型号如下。

公司.rb

has_many :company_users, dependent: :destroy
has_many :users, through: :company_users, dependent: :destroy

公司用户.rb

belongs_to :company
belongs_to :user

用户.rb

has_one :company_user, dependent: :destroy
has_one :company, through: :company_user

当我删除公司时,它需要删除公司用户和用户。

目前它只删除公司用户。关于如何解决这个问题的任何想法?

【问题讨论】:

  • 为什么要删除用户?如果用户与任何其他公司相关联,则会出现问题
  • 如果情况是用户只与一家公司关联,我认为您应该使用company has_many users,在这种情况下您不需要通过关联
  • 该用户仅与一家公司相关。场景是当一个公司被删除时,所有关联的用户也应该被删除。
  • @prajeesh 根据您的要求,关联应该是这样的user belongs to company, company has many users
  • 我认为如果用户直接属于公司,您的CompanyUser 模型将毫无用处。这种连接模型通常只在 has_and_belongs_to_many 情况下才需要。该模型在您的应用程序中的用途是什么?

标签: ruby-on-rails ruby


【解决方案1】:

这将起作用并找到内联的 cmets 以进行更改

class Company < ActiveRecord::Base
    has_many :users, through: :company_users #removed dependent destroy
    has_many :company_users, dependent: :destroy 
end

class User < ActiveRecord::Base
    has_one :company_user
    has_one :company, through: :company_user
end

class CompanyUser < ActiveRecord::Base
    belongs_to :company
    belongs_to :user, dependent: :destroy #added dependent destroy
end

日志

DELETE FROM "company_users" WHERE "company_users"."id" = ?[0m  [["id", 4]]
DELETE FROM "users" WHERE "users"."id" = ?[0m  [["id", 4]]
DELETE FROM "companies" WHERE "companies"."id" = ?  [["id", 4]]

【讨论】:

  • 这可行,但有一个问题。当一个用户被删除时,相应的公司用户也应该被删除。这就是我添加 has_one :company_user,dependent: :destroy 的原因。但这会破坏“堆栈级别太深”的错误。关于如何解决这个问题的任何想法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2013-11-05
相关资源
最近更新 更多