首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过关联创建而不是删除

通过关联创建而不是删除
EN

Stack Overflow用户
提问于 2018-10-10 07:59:01
回答 1查看 548关注 0票数 2

我有一个工业表,并正在跟踪它的竞争对手,也是行业。这是通过一个映射表industry_competitors实现的,它包含industry_id和competitor_id。我想要追踪行业竞争对手的联系和分离。

代码语言:javascript
复制
class Industry < ApplicationRecord
  has_many :industry_competitors, dependent: :destroy
  has_many :competitors, through: :industry_competitors
end


class IndustryCompetitor < ApplicationRecord
  has_paper_trail
  belongs_to :industry
  belongs_to :competitor, class_name: "Industry"
end

我的控制器代码就是这样的。

代码语言:javascript
复制
  competitors = ::Industry.where(id: params[:competitor_ids])
  @industry.competitors = competitors
  @industry.save

每次整个竞争对手名单都被通过。如果我试图将少数竞争对手(通过不将is传递给控制器)与行业分离,就会触发一个“Delete”查询。

代码语言:javascript
复制
  DELETE FROM `industry_competitors` WHERE `industry_competitors`.`industry_id` = 4559 AND `industry_competitors`.`competitor_id` = 4564

我怀疑是因为activerecord调用了“删除”而不是“销毁”,因此没有触发这个文件路径回调,因此不会跟踪更改。如果有一种方法显式调用delete (代码更改最少)。还是有一种方法可以让文件记录跟踪删除?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-16 09:59:25

添加此修补程序可以使其工作。

代码语言:javascript
复制
module HasManyThroughAssociationPatch
  def delete_records(records, method)
    method ||= :destroy
    super
  end
end

ActiveRecord::Associations::HasManyThroughAssociation.prepend(HasManyThroughAssociationPatch)

学分:tracking

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52735346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档