You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跟着SitePoint教程开发Sorcery应用遇NoMethodError错误求助

解决Sorcery应用中的NoMethodError: undefined method `name' for nil:NilClass

这个错误的核心原因很明确:你的视图模板activation_needed_email.html.erb里的@user对象是nil,所以调用.name方法才会触发这个报错。虽然你的迁移文件已经给users表添加了name字段,但问题出在邮件发送时没有正确把用户实例传递给视图。

下面是一步步的排查和解决方法:

  • 检查UserMailer的方法实现
    确保你的UserMailer里的activation_needed_email方法正确接收了用户参数,并赋值给@user实例变量,这样视图才能访问到它。正确的代码应该类似这样:

    class UserMailer < ApplicationMailer
      def activation_needed_email(user)
        @user = user # 必须把传入的user赋值给@user,视图才能拿到
        mail(to: user.email, subject: '请激活你的账户')
      end
    end
    
  • 确认调用邮件方法时传递了正确的用户实例
    比如在UsersController的create动作里,发送邮件时要确保传入的是已创建的用户对象:

    def create
      @user = User.new(user_params)
      if @user.save
        # 这里要传入@user,而不是nil或者其他错误的对象
        UserMailer.activation_needed_email(@user).deliver_now
        redirect_to root_path, notice: '用户创建成功,请查收邮件激活账户'
      else
        render :new
      end
    end
    
  • 临时防护方案(可选)
    如果你想避免这类nil报错影响页面渲染,可以在视图里使用Ruby的安全调用操作符&.,不过这只是权宜之计,还是要从根源确保@user存在:

    <p>Welcome, <%= @user&.name %>!</p>
    

内容的提问来源于stack exchange,提问作者uberdave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:10:42