我正在尝试has_many
使用一种方法覆盖关联 getter。
我has_many
通过 join table有一个卡片关联user_cards
。我在模型中添加了一个方法......试图完全覆盖条件。
has_many :cards, through: :user_cards, source: :canonical, source_type: 'Primary'
该user_cards
所以有一个是多态的source
和source_type
从关联的呼叫。
吸气剂看起来不错......正如预期的那样。
def cards
Card.where(id: user_cards.pluck(:card_id))
end
然而...简单的删除关联记录现在是删除原来的,不仅仅是连接表记录,这是非常可怕的,可以破坏应用程序。
@card = Card.find(1)
@user.cards.delete(@card)
以上@card
从数据库中完全删除了对象......我期待它删除@user.user_cards
记录。
我不熟悉覆盖关联 getter ......请帮忙。谢谢。
解决这个问题的简单方法是UserCard
直接销毁。
@card = Card.find(1)
@card.user_cards.where(user_id: @user.id).destroy
但确保UserCard
没有dependent: destroy
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句