我终于想出了一个解决办法。下面是我在comments控制器中的“create”方法中编写的代码:
respond_to do |format|
if @comment.save
format.html { redirect_to @post, notice: 'Comment was successfully created.' }
format.json { render json: @comment, status: :created, location: @comment }
@commenter = @post.comments.collect(&:user)
@commenter = @commenter.uniq
@commenter.each do |commenter|
MyMailer.commenter_email(commenter).deliver
end
else
format.html { render action: "new" }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
因此,@commenter正在收集对该帖子发表评论的所有用户的列表。然后,我必须让@commeter等于@commenter.uniq,这样当用户在帖子上评论3次时,他们不会在别人评论时收到三封电子邮件。
然后我在my_mailer.rb中创建了一个mailer视图和一个commenter_email方法
唯一的问题是,如果你是第一个发表评论的人,你也会收到一封电子邮件,因为我在控制器中包含了“保存”之后的邮件。