我创建了下面的邮件,当用户评论您之前评论过的音乐评论时,会通过电子邮件发送给您。我不希望将电子邮件发送给进行评论的人(评论者),但是它正在向他们发送电子邮件。任何想法如何解决这个问题?
这是我在评论控制器中创建的: 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
答案 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的不同对象,因此它们不会被认为是相等的。