2016-07-15 5 views
0

Я разрабатываю приложение для рельсов. Я хочу разбить предложение, введенное в поисковом ящике, в моем приложении, используя split (""). Но я получаю undefined метод `split 'для nil: ошибка NilClass. Я использую данные формы, и поскольку данные в поле поиска формы пусты во время загрузки страницы, я получаю эту ошибку.Вопросы, связанные с методом split

Мой код: -

def string_array_conversion(sentence) 
sen_array=Array.new 
values = sentence.split() 

values.each do |value| 
    sen_array.push(value) 
    puts value 
end 
puts "this is the array" 
puts sen_array 
return sen_array 
end 

Здесь параметр функции 'предложение' является формой данных. Он находится в методе вызывающего абонента: Титулы [пт]

код, который вызов метода является:

def new 

@emp=Employee.new 
@emps=Employee.all 

@aut=Autocomp.new 
@auts=Autocomp.all 

@check=params[:pt] 
puts @check 

ret_sen_array=string_array_conversion(@check) 
puts ret_sen_array 
end 

Скажите, пожалуйста, как решить эту проблему.

+0

Проверьте ответ ниже и сообщите мне, работает ли он или нет? –

+1

Вы можете использовать только 'предложение.to_s.split()'. Это вернет массив, вам не нужно будет преобразовывать этот массив в другой массив;) –

+0

спасибо, мне кажется отличным решением для меня @LukasBalik – Abhradip

ответ

1
values = sentence.split() 

Заменить выше линии следующую строку.

values = if sentence.present? 
    sentence.split() 
else 
    [] 
end 
0

sentence Прибывает nil в ваш метод. Нам нужен код, который вызывает string_array_conversion

0

Причиной ошибки является значение sentence is nil. Убедитесь, что значение sentence не равно nil. Вы можете контролировать исключение, подобное этому,

def string_array_conversion(sentence) 
return unless sentence 

sen_array=Array.new 
values = sentence.split() 

values.each do |value| 
    sen_array.push(value) 
    puts value 
end 
puts "this is the array" 
puts sen_array 
return sen_array 
end 
0

Я бы принял еще один подход к решению этой проблемы.

В Ruby nil отвечает на метод .to_s и возвращает пустую строку (""). Кроме того, строка может ответить на этот метод и возвращает ту же строку (это идемпотентная операция). Таким образом, я буду называть метод .to_s переменной sentence для обеспечения работы со строками:

def string_array_conversion(sentence) 
    sen_array=Array.new 
    values = sentence.to_s.split() 

    values.each do |value| 
     sen_array.push(value) 
     puts value 
    end 
    puts "this is the array" 
    puts sen_array 
    return sen_array 
    end 
Смежные вопросы