ruby-on-rails - 未定义方法 'user' 为 nil :nilClass

标签 ruby-on-rails ruby ruby-on-rails-4

根据类(class)中的一个月 Rails 类(class):Pins Users and Associations 我必须在运行 rails console 后执行以下操作:

Pin.connection #This establishes a connection to the database (And spits out a LOT of unnecessary data)

Pin.inspect #shows all of the parameters for a Pin 
CONTROL + D #closes the Console 

pin = Pin.first #make sure Pin.first is UPPERCASE
pin.user

但是当我写 pin.user 时,我得到一个错误 NoMethodError: undefined method 'user' for nil:NilClass

我添加了 belongs_to :userhas_many :pins

我不明白为什么会出现该错误。

我的github是https://github.com/frankzk/pinteresting

最佳答案

澄清一下,错误的产生是因为原始对象(在您的例子中是 @pin)没有填充任何数据(因此它是 nil)。

--

错误

很多初学者对这个错误感到困惑,其实很简单:

@pin.user 

^ 这会调用 @pin 对象上的 .useruser 方法是根据您的 Rails 关联创建的 (belongs_to :user),旨在为您提供关联数据。

您遇到的问题是您在未填充的对象(它是 'nil' 类的一部分)上调用 .user,因此阻止了 .user 实际运行的方法。

--

修复

要解决这个问题,您应该这样做:

#app/controllers/pins_controller.rb
Class PinsController < ActieRecord::Base
    def show
        @pin = Pin.find params[:id] #-> or Pin.first
    end
end

#app/views/pins/show.html.erb
<%= @pin.user %>

如果在此之后出现错误,通常意味着数据不一致(数据库中没有数据),或者系统的某些其他部分不一致。

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

相关文章:

ruby-on-rails - 谷歌通讯录 API : How to get contacts in sorted order by their name

ruby-on-rails - Ubuntu 未检测到 Rails 安装

ruby-on-rails - 使用 rvmrc 或 ruby​​-version 文件通过 RVM 设置项目 gemset?

sql - 尽管需要 'will_paginate/array',但数组无法与 will_paginate 一起使用?

ruby - 带有 selenium 和 rspec 的 ies4linux

javascript - 从 Rails 中的 javascript 选项获取值

ruby-on-rails - xxx 的副本已从模块树中删除但仍处于事件状态

javascript - 如何使用 ruby​​ on Rails 设置 jstree

ruby-on-rails - Redmine 在 Apache 中无法正常工作

mysql - 更新collection_singular_ids时如何触发 `dependent: destroy`