依赖: :destroy 不工作

Posted

技术标签:

【中文标题】依赖: :destroy 不工作【英文标题】:dependent: :destroy not working 【发布时间】:2016-06-06 19:50:19 【问题描述】:

我有以下情况:

user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  after_create :create_profile
  after_create :programstart

  has_one :profile, dependent: :destroy
  has_many :weights, dependent: :destroy
  has_many :programstarts, dependent: :destroy

  has_many :user_nutrients, dependent: :destroy
  has_many :nutrients, through: :user_nutrients, dependent: :destroy


  private

  def programstart
    Programstart.create(:user_id => id)
  end
end

营养素.rb

class Nutrient < ActiveRecord::Base
  validates :name, uniqueness: true

  has_many :user_nutrients
  has_many :users, through: :user_nutrients
end

user_nutrient.rb

class UserNutrient < ActiveRecord::Base
  belongs_to :user 
  belongs_to :nutrient
end

对于配置文件、权重和程序启动,dependent: :destroy 有效。当我删除用户时,所有关联的数据库条目都会被删除。但是,对于user_nutrientsdependent: :destroy 不起作用。删除用户后,这些条目仍然存在。

我在这里错过了什么?

【问题讨论】:

错误信息是什么? 没有错误信息。我从控制台中删除了用户,所有依赖记录都被删除,除了 user_nutrients 表中的记录。 【参考方案1】:

根据这篇文章 - http://makandracards.com/makandra/32175-don-t-forget-automatically-remove-join-records-on-has_many-through-associations 您应该执行以下操作:

has_many :user_nutrients
has_many :nutrients, through: :user_nutrients, dependent: :destroy

在 nut.rb 中

has_many :user_nutrients
has_many :users, through: :user_nutrients, dependent: :destroy

【讨论】:

试过了 - 记录还在。

以上是关于依赖: :destroy 不工作的主要内容,如果未能解决你的问题,请参考以下文章

ActiveRecord:为啥 has_many 依赖: :destroy 不起作用?

如何修改依赖::destroy 查询 has_many 关系

markdown has_manyに依赖:destroyをつけたときの挙动

sess_destroy() 无法正常工作

如何在不等待 pthread_barrier_wait() 的情况下执行 pthread_barrier_destroy()

我的 rails 嵌套模型无法识别 _destroy 属性