3

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.

4

1 に答える 1

2

あなたが解決したと思うように、関連する Answer インスタンスではなくクラスを呼び出しadd_to_watchersており、そのメソッドはクラスによって実装されていません。そのため、エラーが発生します。AnswerClass

Comment から Answer への次のような関連付けがあると思います。

belongs_to :answer

その場合、関連する Answer インスタンスを参照できますanswer

def creator_watches_me
  answer.add_to_watchers(user)
end 
于 2013-04-21T19:57:47.260 に答える