删除相关记录后,在Rails中覆盖has_many关联getter后删除原始记录

时间:2017-04-26 09:28:20

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

我正在尝试使用方法覆盖has_many关联getter。

我通过联接表has_many获得卡片user_cards关联。我在模型中添加了一个方法...试图完全覆盖条件。

has_many :cards, through: :user_cards, source: :canonical, source_type: 'Primary'

user_cards是多态的,因此关联调用中有sourcesource_type

getter看起来没问题......正如所料。

def cards
  Card.where(id: user_cards.pluck(:card_id))
end

但是......关联记录的简单删除现在正在删除原始记录,而不仅仅是连接表记录,这些记录非常可怕,可能会破坏应用程序。

@card = Card.find(1)
@user.cards.delete(@card)

以上内容完全从数据库中删除@card对象...我希望它删除@user.user_cards记录。

我不熟悉覆盖关联吸气剂......请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

解决此问题的简便方法是直接销毁UserCard

@card = Card.find(1)
@card.user_cards.where(user_id: @user.id).destroy

但请确保UserCard没有dependent: destroy