Rails アプリの Answer.rb モデルに次のコードがあります。ユーザーが (質問に対して) 回答を投稿すると、その回答にコメントが投稿された場合に通知を受けるリストに追加されます。
Answer.rb
has_and_belongs_to_many :watchers, :join_table => "answer_watchers", :class_name => "User"
after_create :creator_watches_me
private
def creator_watches_me
self.watchers << user
end
これは (表示されていないコードと共に) コメントが投稿された場合に、質問に回答したユーザーに通知するように機能します。ただし、同じユーザーが返信でコメントを投稿した場合、コメントが回答者または他の誰かによって追加された場合、元のコメント投稿者に通知されるようにします。したがって、この同じリストに回答についてコメントする人を追加したいと思いますが、回答のインスタンスごとに個別のリストを保持する必要があります。ここで私は困っています。
私はそれ(新しいコメンター)をクラスではなく回答インスタンスに追加する必要があると想定していますが、その方法は完全にはわかりません。以下のコードはすべて壊れています。私は、それが成功せずにどのように機能するかをいじろうとしています。
私のcomment.rbモデルでは、ユーザーをAnswerモデルのメソッドadd_to_watchersに渡すこのコードを追加しました
コメント.rb
after_create :creator_watches_me
private
def creator_watches_me
Answer.add_to_watchers(user)
end
Answer.rbモデルでは、これがありました
def add_to_watchers(user)
self.watchers << user
end
しかし、今はコメントをまったく追加できません。このエラーが発生します
undefined method `add_to_watchers' for #<Class:0x007faead33f7f8>
私が抱えている可能性があると推測している1つの問題は、コメントモデルから Answer のインスタンスを参照する方法と、そのインスタンスを Answer.rb に渡す方法がわからないため、ユーザーをどの回答に追加する必要があるかがわからないことです。 . もちろん、それは完全に間違っている可能性があります:(インスタンスメソッドとクラスメソッドに関するいくつかのブログ投稿を読みましたが、それが問題である場合でも、コードで整理するのに苦労しています.
ご存じのように、Answer と Comment の間には関連があります。Answer.rb has_many :comments.