用于评论系统的Rails邮件程序

时间:2014-07-07 17:48:50

标签: ruby-on-rails actionmailer

我创建了下面的邮件,当用户评论您之前评论过的音乐评论时,会通过电子邮件发送给您。我不希望将电子邮件发送给进行评论的人(评论者),但是它正在向他们发送电子邮件。任何想法如何解决这个问题?

这是我在评论控制器中创建的:     def创建     @pin = Pin.find(params [:pin_id])     @comment = @ pin.comments.create(params [:comment])     @ comment.user = current_user

if @comment.user != @pin.user
  MyMailer.comment_email(@pin.user).deliver
end  

respond_to do |format|
  if @comment.save
    format.html { redirect_to @pin, notice: 'Comment was successfully created.' }
    format.json { render json: @comment, status: :created, location: @comment }

    @commenter = @pin.comments.collect(&:user)
    @commenter = @commenter.uniq

    @commenter.each do |commenter| 
      if commenter != @pin.user || commenter != @comment.user
        MyMailer.commenter_email(commenter).deliver
      end  
    end  

  else
    format.html { render action: "new" }
    format.json { render json: @comment.errors, status: :unprocessable_entity }
  end
end
end

邮件:

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

我原以为这(在上面的代码中)会照顾不发送给评论者:

commenter != @comment.user

2 个答案:

答案 0 :(得分:1)

我认为此块正在向不受欢迎的人发送电子邮件:

if commenter != @pin.user || commenter != @comment.user
  MyMailer.commenter_email(commenter).deliver
end  

根据您的数据,您可能希望将||更改为&&,或者完全在if语句中修改您的逻辑。

答案 1 :(得分:0)

通常,您应该通过数据库ID而不是对象进行比较。例如:

commenter.id != @comment.user_id

原因是ruby可以实例化两个表示相同数据库记录的对象,但它们将是具有不同对象id的不同对象,因此它们不会被认为是相等的。