跟着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
相关产品推荐
相关产品推荐

