2017-05-06 17 views
0

後でいくつかのデータをフィルタリングするために使用するカスタムタグを作成しています。文字列を配列にプッシュするときにいくつかの文字を取り除くことができない

"[\" ウィッチャー3 \ "\ "ワル\"、\ "叙事詩\"]"

@tags = [] 
     params[:tags].split(', ').map do |tag| 
      @tags.push(tag.strip) 
     end 

# About 5 lines under 

FileDetail.create!(path: path, creation_date: date, tags: @tags) 

理由:私は、アレイ内のタグを追加する場合しかし、私は次の取得しますこれらは\と表示されますが、なぜ.stripは機能しませんか?

はあなたが@tagに文字列の配列を設定している、と\"Stringオブジェクトを表すためにルビーで使用され、この場合"には、escaped characterを表し、事前

答えて

1

でいただきありがとうございます。

次のコード(IRB上でそれを試してみてください)考えてみましょう:あなたが見ることができるように

foo = ["bar", "baz"] 
#=> ["bar", "baz"] 

foo.inspect 
#=> "[\"bar\", \"baz\"]" 

foo.each { |f| puts "tag: #{f}" } 
# tag: bar 
# tag: baz 

を、ルビーはString表現を出力して、どれだけの文字列から取り除くために何\文字は本当にありません。だからあなたのコードは、.strip方法は必要ありません:あなたの質問に関連していない

@tags = [] 
params[:tags].split(', ').map do |tag| 
    @tags.push(tag) 
end 

を、まだ関連:前1を作成し、アイテムをプッシュする必要はありませんので、split方法は、配列を返しますそれに;返された配列を@tagsに代入するだけです。例えば

params[:tags] = "witcher 3, badass, epic" 
#=> "witcher 3, badass, epic" 

@tags = params[:tags].split(', ') 
#=> ["witcher 3", "badass", "epic"] 

必要であれば、あなたはまだ、先頭と末尾のスペースを削除するにはmapstripを使用することができます。

params[:tags] = "witcher 3,  badass , epic " 
#=> "witcher 3,  badass , epic " 

params[:tags].split(",").map(&:strip) 
#=> ["witcher 3", "badass", "epic"] 
+0

これは、私も何をしたという史上初めてですがStack overflowでの問題は1つもありませんでした。ハイライトありがとう! – Jaeger

+1

@Jaeger喜んで助けてください!また、コードの追加ヒントについては、更新された回答を確認してください。 – Gerry

+0

ありがとう、私はすでにこのトリックを知っていたが、とにかくそれらをすぐに使用する:) – Jaeger

関連する問題