向用户发送电子邮件,通知他们在个人资料中发布了新内容

时间:2012-03-07 00:12:49

标签: ruby-on-rails-3

在我的Rails 3应用中,一个人的个人资料可以拥有最高级别。实际上,Profile模型已设置为:has_many :superlativesSuperlative :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

1 个答案:

答案 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