В моем приложении на 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'