Ruby on rails 未定义的方法';用户';零级:零级
根据课程中为期一个月的Rails课程:Ruby on rails 未定义的方法';用户';零级:零级,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,根据课程中为期一个月的Rails课程:Pins用户和关联运行Rails控制台后,我必须执行以下操作: 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 = Pi
Pins用户和关联
运行Rails控制台
后,我必须执行以下操作:
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:nil:NilClass的未定义方法“user”
我已经添加了属于:user
并且有许多:pin
我不明白为什么我会犯那个错误
My github是为了澄清,创建错误是因为原始对象(在您的例子中是
@pin
)没有填充任何数据(因此它是nil
)
--
错误
很多初学者对这个错误感到困惑,但很简单:
@pin.user
^这将调用@pin
对象上的.user
。user
方法是从rails关联中创建的(属于: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 %>
#app/controllers/pins_controller.rb
类PinsController或pin.first
结束
结束
#app/views/pins/show.html.erb
如果在此之后出现错误,通常意味着数据不一致(数据库中没有数据),或者系统的某些其他部分不一致。请确保pins表具有列名user\u id。或者检查数据库中是否存在第一个Pin的记录 如果你和我一样,你所有的代码都是正确的,而Mattan只是把一小段代码放错了地方
class PinsController < ApplicationController
before_action :authenticate_user!, except: [:index, :show]
before_action :set_pin, only: [:show, :edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update, :destroy]
class PinsController
确保在\u操作之前:验证\u用户!,除了:[:index,:show]
位于列表的顶部
编辑:事实上,我看到你在上一节课的前半部分;我将保留这个答案,因为我在试图找出授权部分时被引导到了这个问题。
pin.user
应该是pin.user(caps p)
我猜。数据库中有pin吗?它说的是pin=pin。首先
返回nil如果你所做的是pin=pin。首先
,那么你的数据库中就没有pin
,你需要创建一个pin
pin=pin。首先
返回nil
,你正试图从nil
对象获取用户实例。因此,您将获得nil:NilClass的NoMethodError:undefined方法“user”
@bjhaid如何创建Pin?