代码之家  ›  专栏  ›  技术社区  ›  Tony Tambe

创建邮件器,向对帖子发表评论的每个人发送电子邮件

  •  0
  • Tony Tambe  · 技术社区  · 10 年前

    我有一个博客,它有一个对每个帖子进行评论的模型。我设置了一个邮件程序,以便当有人对其帖子发表评论时,帖子作者会收到电子邮件提醒。我现在想做的是发出一封电子邮件通知,通知其他所有对该帖子发表评论的用户。我想我需要一个if/then语句,但我还没有完全弄清楚。

    以下是创建帖子时的控制器:

    def create
    @post = Post.find(params[:post_id])
    @blog_comment = @post.blog_comments.create(params[:blog_comment])
    @blog_comment.user = current_user
    
    respond_to do |format|
      if @blog_comment.save
        format.html { redirect_to @post, notice: 'Blog comment was successfully created.' }
        format.json { render action: 'show', status: :created, location: @blog_comment }
      else
        format.html { render action: 'new' }
        format.json { render json: @blog_comment.errors, status: :unprocessable_entity }
      end
    end
    

    这是我的邮件:

    def blog_comment(user)
    @user = user
    mail(to: [user.email],
        bcc: ['user@example.com'],
       from: 'user@example.com',
    subject: 'Hi from theTens!')
    end
    

    在模型中:每个帖子都有很多blog_comments,帖子属于user,blog_comment属于post和belong_to user

    1 回复  |  直到 10 年前
        1
  •  0
  •   Tony Tambe    10 年前

    我终于想出了一个解决办法。下面是我在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方法

    唯一的问题是,如果你是第一个发表评论的人,你也会收到一封电子邮件,因为我在控制器中包含了“保存”之后的邮件。