Отправить электронное письмо пользователю, уведомив его, что что-то новое было размещено в его профиле - PullRequest
0 голосов
/ 07 марта 2012

В моем приложении на Rails 3 профиль человека может иметь превосходную степень. На самом деле модель Profile настроена так, что она :has_many :superlatives и Superlative :belongs_to :profile. Что я хотел бы сделать, так это отправить моим пользователям электронное письмо, когда их профиль получит новую превосходную степень. Я просто не уверен, что передать в мои действия Mailer и Mailer, чтобы заставить это работать. Кто-нибудь может мне помочь?

Я следил за RailsCast на Action Mailer , чтобы отправлять другие электронные письма, поэтому все мои почтовые сообщения находятся в контроллере. Я не очень понимаю, что происходит. Я знаю, что мне нужно использовать недавно созданную превосходную степень, чтобы найти профиль, чтобы найти пользователя, чтобы найти электронную почту пользователя (что заставляет меня думать, что есть более простой способ сделать это. Я попытался назначить @profile в действии Superlatives#create, но это выдало ошибку.

При этом, я довольно много пробовал и выложил свой код ниже.

Мое create действие в моем превосходном контроллере:

def create
  @superlative = Superlative.new(params[:superlative].merge(:author_id => current_user.id))
  if @superlative.save!
    SuperlativeMailer.new_superlative(@user).deliver
    respond_to do |format|
      format.js { }
    end
  else
    respond_to do |format|
      format.js { render 'fail_superlative_create.js.erb' }
    end
  end
end

И действие new_superlative моего SuperlativeMailer:

def new_superlative(user)
  @superlative = superlative
  @profile = superlative.profile
  @user = superlative.profile.user
  mail(:to => user.email, :subject => "#{@superlative.name} just gave you a superlative.")
end

Однако при всем этом я получаю сообщение об ошибке:

NameError (undefined local variable or method `superlative' for #<SuperlativeMailer:0x103c006a8>):
  app/mailers/superlative_mailer.rb:6:in `new_superlative'
  app/controllers/superlatives_controller.rb:8:in `create'

1 Ответ

1 голос
/ 07 марта 2012

Вам необходимо передать объект Superlative в почтовую программу вместо User

def new_superlative(superlative)
  @superlative = superlative
  @profile = superlative.profile
  @user = superlative.profile.user
  mail(:to => @user.email, :subject => "#{@superlative.name} just gave you a superlative.")
end

И в контроллере

SuperlativeMailer.new_superlative(@superlative).deliver

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...