NoMethodError:nil的未定义方法`user':NilClass

时间:2016-08-10 21:00:45

标签: ruby-on-rails hyperlink

我正在尝试创建一个@ link.user,但它一直给我这个'未定义的方法'错误。

    irb(main):002:0> @link.user
  

NoMethodError:未定义的方法user' for nil:NilClass from (irb):2 from c:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.5.1/lib/rails/commands/console.rb:110:in start'           来自c:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.5.1/lib/rails/commands/console.rb:9:in   start' from c:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:68:in控制台”           来自c:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:39:in run_command!' from c:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/railties-4.2.5.1/lib/rails/commands.rb:17:in '           来自bin / rails:4:require' from bin/rails:4:in'

我的user.rb

class User < ActiveRecord::Base
     devise :database_authenticatable, :registerable,
            :recoverable, :rememberable, :trackable, :validatable

     has_many :links
 end     

我的link.rb

class Link < ActiveRecord::Base
    belongs_to :user

    def show
    end

end

2 个答案:

答案 0 :(得分:0)

@link本身只是一个未指定的实例变量,并且始终为nil,因此@link.anything将为您提供undefined method 'anything' for nil:Nilclass

将@link设置为首先包含内容。

@link = Link.new
然后

@link.user将起作用,但由于您尚未将用户分配给Link对象,因此它将为零。

答案 1 :(得分:0)

让我知道@link对象中的内容。 以下是有关您的问题的一些建议

  • 首先,您在数据库的用户表和链接表中有记录 与您适当的联系。
  • 检查链接表中是否有user_id
  • 使用两个或您的链接记录创建用户

例如,

@user = User.create(name: "foram")

现在,与用户创建链接,例如

@user.links.create(comment: "something in comment")

您可以在控制台中检查用户是否具有链接或与哪个用户相关的链接

@user.links(@user which has one record from user table)
@link.user(@link which has one record from link table)

有关导轨的关联,请参见下面的链接。 Rails Assoiciations