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