繁体   English   中英

Rails中nil:NilClass的未定义方法`+'

[英]undefined method `+' for nil:NilClass in Rails

models下的user.rb文件中,我定义了一个full-name方法,并在视图中调用了该方法。 它引发了一个我不知道如何解决的错误。

NoMethodError in Statuses#index
Showing app/views/layouts/application.html.erb where line #24 raised:
undefined method `+' for nil:NilClass
Extracted source (around line #10):

def full_name
  first_name + " " + last_name
end

Rails.root:

Application Trace | Framework Trace | Full Trace
app/models/user.rb:10:in `full_name'
app/views/layouts/application.html.erb:24:in `_app_views_layouts_application_html_erb__1801360389632919652_70105866374460'
<li>
  <%= link_to current_user.full_name, edit_user_registration_path %>
</li>

您的first_name属性包含nil

由于NilClass不实现+方法,因此会引发错误。 一种解决方法是将值转换为字符串:

first_name.to_s + " " + last_name.to_s

但是更好的惯用方式是使用字符串插值:

def full_name
  "#{first_name} #{last_name}"
end

要查看包含在变量中的实际值,可以使用

puts first_name

但是,由于nil值在打印时将变为空字符串,因此它看起来与空白字符串""相同。 要查看打印时该值是否实际上为nil ,可以使用

puts first_name.nil?
# => true

要么

puts first_name.class
# => NilClass

您的代码是正确的,只是您有一个(或多个)记录的first_name(和/或空的last_name)中有空值。 就像Nic解释的那样,Ruby没有从nil到string的自动转换,但是我建议您为这些字段提供一些值,所以我建议您对它们使用适当的验证:

class User < ActiveRecord::Base
  validates :first_name, :last_name, presence: true
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM