2014-02-09 1 views
0

У меня есть блог, в котором есть модель для комментирования каждого сообщения. У меня есть почтовая программа, настроенная так, что автор сообщения получает уведомление по электронной почте, когда кто-то комментирует их сообщение. Теперь я хочу сделать оповещение по электронной почте, которое выйдет к каждому другому пользователю, который также прокомментировал это сообщение. Думаю, мне понадобится инструкция 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: ['[email protected]'], 
    from: '[email protected]', 
subject: 'Hi from theTens!') 
end 

В моделях: каждый пост has_many blog_comments, посты BELONGS_TO пользователя, blog_comments belong_post и принадлежит пользователю

+0

извините, но где код для почтовой программы, который вы хотите реализовать? – phoet

+0

Вот что я прошу. Как мне реализовать эту почтовую программу? Мне нужно как-то захватить всех пользователей, которые прокомментировали сообщение, а затем отправить их по электронной почте. –

+0

да, точно. сделай это. – phoet

ответ

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 equal @ commenter.uniq, так что, когда пользователь 3 раза пишет сообщение, они не получают три письма, когда кто-то еще замечает.

Тогда я просто сделал вид почтовой программы и метод commenter_email в my_mailer.rb

Единственная проблема в том, что если ты первый человек, который комментирует, вы получите по электронной почте тоже, так как я включил mailer после «сохранения» в контроллере.

 Смежные вопросы

  • Нет связанных вопросов^_^