我正在尝试使用方法覆盖has_many
关联getter。
我通过联接表has_many
获得卡片user_cards
关联。我在模型中添加了一个方法...试图完全覆盖条件。
has_many :cards, through: :user_cards, source: :canonical, source_type: 'Primary'
user_cards
是多态的,因此关联调用中有source
和source_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
记录。
我不熟悉覆盖关联吸气剂......请帮忙。感谢。
答案 0 :(得分:0)
解决此问题的简便方法是直接销毁UserCard
。
@card = Card.find(1)
@card.user_cards.where(user_id: @user.id).destroy
但请确保UserCard
没有dependent: destroy