[英]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.