簡體   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-2025 STACKOOM.COM