2016-06-29 3 views
1

В моем user.rb файле под models я определил метод full-name и назвал этот метод в своих представлениях. Это вызывает эту ошибку, и я не знаю, как ее решить.Неопределенный метод `+ 'для nil: NilClass in 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). Как Nic пояснил Рубин не имеет автоматический бросок от нуля до строки, но я suppouse вы хотите некоторое значение для этих полей, поэтому я предлагаю вам использовать надлежащую проверку для них:

class User < ActiveRecord::Base 
    validates :first_name, :last_name, presence: true 
end 
Смежные вопросы