为什么我的实例变量没有在动作邮件的视图中设置?

时间:2012-01-21 01:33:45

标签: ruby-on-rails view actionmailer instance-variables

由于某种原因,我的实例变量未在此ActionMailer中设置。其他ActionMailers似乎工作正常。可能导致这种情况的任何想法? UserMailer是一个限制词perpahps吗?

使用rails 3.1

# app/mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
  default from: 'My Name <myname@example.com>'

  def registration_confirmation(user)  
    # Don't send email if we don't have an email address to send it to or the user is already confirmed 
    return unless user and user.email and not user.confirmed_at

    # Set global variable for mail view
    @my_message = 'Hello world!'

    # Send email
    mail(to: "#{user.name} <#{user.email}>", subject: 'Please confirm your email address')  
  end

end


# app/views/user_mailer/registration_confirmation.text.erb

Hello who? <%= @my_message %> # Simply returns 'Hello who? '

2 个答案:

答案 0 :(得分:1)

原来这一行:

return unless user and user.email and not user.confirmed_at

没有中止发送电子邮件。相反,它只是中止您在上面看到的UserMailer代码并直接进入视图,该视图现在指的是尚未设置的实例变量。所以从本质上讲,ActionMailer的工作方式与常规控制器完全相同。

要解决此问题,我已经调整了检查是否将电子邮件发送到运行UserMailer命令的位置的条件。

答案 1 :(得分:0)

您必须重新启动服务和工作人员(如果有)以反映更改。