尝试从哈希中提取值时,nil:NilClass 的未定义方法 '[]'



我是 Ruby 的新手,在大多数情况下它开始有意义,但后来我遇到了这个问题。

我使用以下方法搜索用户:

user = User.find_by_id(user_id)

我可以做user.inspect,它显示为:

#<User id: 1, username: "test_user", first_name: "test", last_name: "user">

但是,当我尝试这样做时:

user[:id] 

我得到:

undefined method `[]' for nil:NilClass

我忽略了什么?

这是user.rb:

class User < ActiveRecord::Base
  # Validations
  validates :first_name, :last_name, :presence => true
  validates :username, :uniqueness => {:allow_blank => true}
  # Setup accessible (or protected) attributes for your model
  default_fields = [:username, :first_name, :last_name]
  attr_accessible *default_fields
  # Instance Methods
  def full_name
    "#{first_name} #{last_name}"
  end
end

此外,如果我这样做:

user.to_s

它导致:

#<User:0x007fdad09717f8>

这进一步使我相信它不是 nil,但我无法引用哈希值。

你的第一句话

user = User.find_by_id(user_id)

返回了一个 null 对象,因此您需要对此进行测试以避免异常:

if( ! user.nil? )
# code with user[:id]    
end

因此,问题与代码无关,而是与我用来获取"user_id"值的数据库表中的数据有关。 这就是我信任其他人会对项目中的所有模型编写正确验证所得到的。

感谢大家帮助我解决这个问题,如果我不需要创建一个重现该问题的最小示例,我永远不会偶然发现数据库中的错误条目。

因此,为了使用Miguel Prz的想法,我最终做到了:

user.nil? ? '' : user[:id] 

这进一步证明了为什么我永远不应该相信别人的工作:)

相关内容

  • 没有找到相关文章