before_destroy没有使用has_many触发:通过

时间:2017-03-02 08:44:16

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我想删除与被销毁的组相关联的group_maps的所有记录。 In the docs,它说

  

如果使用:through选项,则会销毁连接记录,而不是对象本身。

我很困惑。

group.rb

class Group < ApplicationRecord

  belongs_to :user

  has_many :group_maps
  has_many :users, :through => :group_maps

  before_destroy :destroy_group_maps

  def destroy_group_maps
    self.group_maps.delete_all
  end

end

rails c output

编辑1:
顺便说一下,我试过添加,:dependent => destroy:dependent => delete_all也是如此。他们都没有工作。

编辑2:
group_maps_controller.rb

class GroupMapsController < ApplicationController

  def destroy
    GroupMap.find[params[:id]].destroy
  end
end

2 个答案:

答案 0 :(得分:1)

destroy_group_maps方法中,输入:

def destroy_group_maps
  self.group_maps.each { |group_map| group_map.destroy }
end

答案 1 :(得分:1)

您可以添加 before_destroy 来删除关联,而不是调用dependent: :destroy来销毁关联。

删除父记录后,

dependent: :destroy会删除关联的记录。

我更喜欢使用dependent: :destroy而不是before_destroy

class Group < ApplicationRecord

  belongs_to :user

  has_many :group_maps, dependent: :destroy
  has_many :users, :through => :group_maps

  before_destroy :destroy_group_maps

  def destroy_group_maps
    self.group_maps.delete_all
  end

end