2016-07-15 9 views
0

私はレールアプリを開発しています。私はsplit( "")を使って私のアプリの検索ボックスに入力された文を分割したいと思います。しかし、Nilのための未定義のメソッドsplitがあります:NilClassエラーです。フォームデータを使用しています。ページの読み込み中にフォーム検索ボックスのデータが空であるため、このエラーが発生しています。メソッド分割に関連する問題

私のコードは次のとおりです。 -

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 

ここでは、関数のパラメータ「文」はフォームデータです。これは、呼び出し側のメソッドである:のparams [PT]

メソッドを呼び出しているコードは次のとおりです。

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

'sentence.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の値は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というメソッドに応答し、空の文字列("")を返します。さらに、文字列はこのメソッドに応答し、同じ文字列を返します(これは冪等の操作です)。だから、私は、文字列での作業を確認するためにsentence変数のメソッド.to_sと呼ぶことにします:

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 
関連する問題