创建邮件,通过电子邮件发送评论帖子的所有人

时间:2014-02-09 17:51:06

标签: ruby-on-rails actionmailer mailer

我有一个博客,其中有一个评论每个帖子的模型。我有一个邮件设置,以便当有人评论他们的帖子时,帖子的作者会收到电子邮件提醒。我现在想要做的是发送一个电子邮件提醒,该提醒将发送给同时评论该帖子的所有其他用户。我想我需要一个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

在模型中:每个帖子都有_many blog_comments,帖子belongs_to用户,blog_comments belongs_post和belongs_to用户

1 个答案:

答案 0 :(得分:0)

我终于想出了一个解决方案。这是我在"创建"中编写的代码。我的评论控制器中的方法:

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正在收集对该帖子发表评论的所有用户的数组。然后,我必须让@commenter等于@ commenter.uniq,以便当用户在帖子上发表3次评论时,只要有人评论,他们就不会收到3封电子邮件。

然后我在my_mailer.rb中制作了一个邮件程序视图和一个commenter_email方法

唯一的问题是,如果您是第一个发表评论的人,那么您也会收到一封电子邮件,因为我在" save"之后收录了邮件。在控制器中。