在我的Rails 3应用中,一个人的个人资料可以拥有最高级别。实际上,Profile
模型已设置为:has_many :superlatives
和Superlative
:belongs_to :profile
。我想做的是在他们的个人资料收到新的最高级别时向我的用户发送电子邮件。我只是不确定要通过我的Mailer和Mailer行动来完成这项工作。有人可以帮助我吗?
我一直关注Action Mailer上的RailsCast发送其他电子邮件,所以我的所有邮件都在控制器中。我不太了解发生了什么。我知道我需要使用新创建的最高级查找配置文件以找到用户查找用户的电子邮件(这让我觉得有更简单的方法来执行此操作。我尝试在{{1}中分配@profile
行动,但这是一个错误。
话虽如此,我已经尝试了很多,并在下面发布了我的代码。
我的superlatives_controller中的Superlatives#create
操作:
create
我的SuperlativeMailer 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
然而,所有这一切都收到错误:
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
答案 0 :(得分:1)
您需要将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