【问题标题】:NoMethodError: undefined method `user' for nil:NilClassNoMethodError: nil:NilClass 的未定义方法“用户”
【发布时间】:2016-12-17 10:19:48
【问题描述】:

我正在尝试创建一个@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:inconsole' 来自 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:in require' from bin/rails:4:in'

我的用户.rb

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

     has_many :links
 end     

我的链接.rb

class Link < ActiveRecord::Base
    belongs_to :user

    def show
    end

end

【问题讨论】:

  • 您似乎正在尝试从尚未设置的 rails 控制台检查实例变量的值。也许您应该尝试从 rails 控制台创建一个新的链接对象并将其保存到一个变量中,然后检查它是否正确关联。例如:'user = User.first'(假设您的数据库中已经有一个用户..如果没有创建一个)然后创建链接使用user.links.create!(link_params)您必须为您的模型传递特定参数,其中它说'link_params'
  • @link 为零,你是如何实例化那个变量的?

标签: ruby-on-rails hyperlink


【解决方案1】:

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

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

@link = Link.new

@link.user 然后会起作用,尽管它会为零,因为您尚未将用户分配给 Link 对象。

【讨论】:

  • 我怎么说将用户分配给链接对象/文件?
  • 如果是当前用户...@link.user = current_user
【解决方案2】:

让我知道@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 中的关联,请参阅以下链接。 Rails Assoiciations

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 2013-01-14
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多