2016-07-02 2 views
0

Я настроил свою конфигурацию, чтобы использовать Mailtrap на Heroku, и могу подтвердить, что у меня есть основная часть ее настройки. Значение Я получаю письма, но только до тех пор, пока я не вызываю методы в пользовательской модели. Персонализация электронной почты с помощью @user.name и автоматизация отправки пользователем с помощью @user.email приводит к ошибке метода. Я подумал, что, возможно, это связано с тем, что я отправляю электронные письма из пользовательской модели, а не из моего настраиваемого пользовательского контроллера, поэтому я добавил к этому метод создания. Который ничего не сделал. Ошибка говорит undefined method 'email' for nil:NilClassПочему я могу получить NoMethodError в Devise :: RegistrationsController # create в ActionMailer?

В моей модели пользователя у меня есть

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 

Есть идеи?

ответ

0

О, вау, как неловко. Он возвращал ноль, потому что я не говорил ему использовать самую недавно созданную запись. Изменение @user = user до @user = User.last в моей почтовой программе разрешило это. T_T

Смежные вопросы