2016-06-29 17 views
1

在我的user.rb文件下的models中,我定义了一个方法full-name,并在我的视图中调用了此方法。它引发了我不知道如何解决的这个错误。未定义方法`+'为零:NilClass在Rails中

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> 
+0

'全name'是一个无效的方法名称。你的问题是什么? – sawa

回答

4

first_name属性包含nil

由于NilClass未执行+方法,因此会引发错误。要处理这个问题的方法是投值的字符串:

first_name.to_s + " " + last_name.to_s 

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

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

要查看包含在一个变量的实际值你可以使用

puts first_name 

但是,因为打印时nil值将成为一个空字符串,它看起来一样"",空白海峡ING。若要查看是否值实际上是nil打印时,您可以使用

puts first_name.nil? 
# => true 

puts first_name.class 
# => NilClass 
+0

那么这是否意味着字符串+字符串无效? –

+0

不,这意味着'nil' +字符串无效。 –

1

你的代码是正确的,只是你有一个(或多个)与FIRST_NAME空值的记录(以及/或空的last_name)。 正如尼克解释Ruby没有自动施放从零到字符串,但我suppouse要为这些领域的一些价值,所以我建议你使用他们的一个适当的验证:

class User < ActiveRecord::Base 
    validates :first_name, :last_name, presence: true 
end 
相关问题