gpt4 book ai didi

ruby-on-rails - 未定义方法 `email' 为 nil :NilClass link. user.email

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:48 24 4
gpt4 key购买 nike

在我的 index.html.erb 文件中,我得到了一个未定义的电子邮件方法。我进入 Rails 控制台并尝试运行 User.first.email 并且它运行良好。我尝试取出电子邮件并运行 link.user,这也奏效了。我不确定为什么当用户绑定(bind)到链接并且用户有电子邮件时,电子邮件会显示为未定义。我正在寻找一些关于可能出现问题的建议。

Index.html.erb

<%= link.user.email %>

已经运行迁移的架构

create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false

模型:

class Link < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
acts_as_votable
attr_accessor :avatar
mount_uploader :avatar, AvatarUploader
end

class User < ActiveRecord::Base
has_many :links
acts_as_voter
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end

链接 Controller :

class LinksController < ApplicationController
before_filter :authenticate_user!, except: [:index, :show]

def index
@links = Link.all
end

def show
@link = Link.find(params[:id])
end

def new
@link = Link.new
end

def edit
end

def create
@link = Link.new(link_params)

if @link.save
redirect_to root_path
else
render 'new'
end
end

private
def link_params
params.require(:link).permit(:title, :url, :avatar, :user_id)
end
end

错误信息:

User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
(0.1ms) begin transaction
(0.1ms) rollback transaction
Rendered links/_form.html.erb (2.7ms)
Rendered links/new.html.erb within layouts/application (3.8ms)
Completed 200 OK in 505ms (Views: 143.6ms | ActiveRecord: 0.4ms)

最佳答案

undefined method `email' for nil:NilClass link.user.email

您收到此错误是因为某些链接的 link.usernil,因此它调用 nil.email 并因上述问题而失败错误信息。

您可以使用 try像这样摆脱这个问题:

<%= link.user.try(:email) %>

这样即使 link.user 在某些情况下为 nil,您的程序也不会崩溃。

关于ruby-on-rails - 未定义方法 `email' 为 nil :NilClass link. user.email,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com