【问题标题】:why do i get a NoMethodError in Devise::RegistrationsController#create in ActionMailer?为什么我在 ActionMailer 中的 Devise::RegistrationsController#create 中出现 NoMethodError?
【发布时间】:2016-07-02 01:07:03
【问题描述】:

我已经设置了我的配置以在 Heroku 上使用 Mailtrap,并且可以确认我已经设置了大部分。这意味着我会收到电子邮件,但前提是我不调用用户模型上的方法。使用@user.name 个性化电子邮件并使用@user.email 自动发送给用户会导致无方法错误。我想这可能与我从用户模型而不是我自定义的设计用户控制器发送电子邮件这一事实有关,所以我添加了一个 create 方法。什么都没做。错误说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

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails devise actionmailer


    【解决方案1】:

    哇,好尴尬。它返回 nil 是因为我没有告诉它使用最近创建的记录。在我的邮件中将@user = user 更改为@user = User.last 解决了它。 T_T

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多