为什么我在ActionMailer中的Devise :: RegistrationsController#create中得到NoM​​ethodError?

时间:2016-07-02 01:07:03

标签: ruby-on-rails devise actionmailer

我已将我的配置设置为在Heroku上使用Mailtrap,并且可以确认我已经设置了大部分内容。这意味着我收到了电子邮件,但只要我不在用户模型上调用方法。使用@user.name个性化电子邮件并自动将其发送给@user.email的用户导致无方法错误。我想也许这与我从用户模型发送电子邮件而不是我的自定义设计用户控制器这一事实有关,所以我添加了一个创建方法。哪个什么也没做。错误显示undefined method 'email' for nil:NilClass

在我的用户模型中,我有

class User < ActiveRecord::Base
 after_create :new_user
 validates :email, presence: true, uniqueness: true, if: -> { self.email.present? }

 private
    def new_user
      UserMailer.new_user(@user).deliver_now
    end
end

在我的用户邮件中,我有

class UserMailer < ApplicationMailer

    def new_user(user)
        @user = user
        mail(to: @user.email, subject: 'You will be notified when your account is activated.')
    end
end

然后在我的用户控制器中,从Devise :: RegistrationsController扩展,我有

class UsersController < Devise::RegistrationsController
 def create
  @user = User.new(sign_up_params)
 end

 private
    def sign_up_params
        params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation, :approved)
    end
end

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

哦,哇,多么尴尬。它返回零,因为我没有告诉它使用最近创建的记录。在我的邮件程序中将@user = user更改为@user = User.last解决了这个问题。 T_T