Създайте мейлър, който изпраща имейл на всеки, който е коментирал публикация

Имам блог, в който има модел за коментиране на всяка публикация. Имам настроен имейл, така че авторът на публикацията да получава предупреждение по имейл, когато някой е коментирал публикацията му. Това, което искам да направя сега, е да направя предупреждение по имейл, което ще бъде изпратено до всеки друг потребител, който също е коментирал тази публикация. Мисля, че ще имам нужда от израз 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

В моделите: Всяка публикация има_много коментари в блога, публикациите принадлежат_на потребителя, коментарите в блога принадлежат на публикацията и принадлежат на потребителя


person Tony Tambe    schedule 09.02.2014    source източник
comment
съжалявам, но къде е кодът за имейла, който искате да внедрите?   -  person phoet    schedule 10.02.2014
comment
Това питам и аз. Как бих внедрил този имейл? Трябва по някакъв начин да хвана всички потребители, които са коментирали публикация, след което да им изпратя имейл.   -  person Tony Tambe    schedule 10.02.2014
comment
да точно. направи го.   -  person phoet    schedule 10.02.2014
comment
@phoet Така че мога да получа потребителите, които са коментирали в конзолата, използвайки нещо като post.comments.find(params[:id]).collect(&:user). Как бих приложил това? Сложих го направо в контролера за създаване?   -  person Tony Tambe    schedule 18.05.2014
comment
навсякъде, където е най-разумно за вас. контролерът е добро начало.   -  person phoet    schedule 19.05.2014
comment
благодаря @phoet Разбрах кода, който трябваше да напиша.   -  person Tony Tambe    schedule 21.05.2014


Отговори (1)


Най-накрая намерих решение. Ето моя код, който написах в метода „create“ в моя контролер за коментари:

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 пъти публикация, да не получава три имейла, когато някой друг коментира.

Тогава току-що направих изглед на пощенска програма и метод commenter_email в my_mailer.rb

Единственият проблем е, че ако сте първият човек, който коментира, вие също ще получите имейл, тъй като включих имейла след „запазване“ в контролера.

person Tony Tambe    schedule 21.05.2014