0

関連付けを介して has_many を使用していますが、before_destroy コールをトリガーに戻すのに問題があります。Relating クラスを使用してモデルを関連付けています。

class Relating < ActiveRecord::Base
  belongs_to :relater, :polymorphic => true
  belongs_to :related, :polymorphic => true

  before_destroy :unset_reminders
end

たとえば、ユーザーは TvShows をお気に入りのリスト User.rb に追加できます。

has_many :tv_shows, :through => :relateds, :source => :related, :source_type => 'TvShow'

私が抱えている問題は、この Relating レコードの削除に関係しています。

ユーザーとテレビ番組を次の方法で関連付けることができます。

user = User.find(1)
show = TvShow.find(1)
user.tv_shows << show

しかし、この関連付けを削除したい場合、before_destroy は以下によってトリガーされません。

user.tv_shows.delete(show)

ただし、関連するレコードを手動で破棄すると、コールバックがトリガーされます。

r = Relating.find(8012)
r.destroy

これをトリガーする前に破棄するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

このメソッドは、こちらのドキュメントにdelete記載されているように、コールバックをトリガーしません。代わりに試してください。destroy

更新: ショー自体ではなく、参加記録を破棄しようとしていることに気づきませんでした。まったく動作することに驚いdeleteていますが、おそらくそれは の機能ですhas_many :through。どうですか:

user.relateds.where(tv_show_id: show.id).destroy
于 2012-06-26T22:58:24.647 に答える