2017-05-06 68 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工作?

預先感謝您

回答

1

要設置一個字符串數組中@tag\"表示escaped character,在這種情況下"這是使用紅寶石代表String對象。

考慮下面的代碼(試試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 

不相關的問題,但仍然具有現實意義: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

這是有史以來第一次我雖然是一個堆棧溢出問題不是一個問題。謝謝你的亮點! – Jaeger

+1

@Jaeger很高興幫助!另請檢查更新後的答案,以獲取代碼的其他提示。 – Gerry

+0

謝謝,我已經知道這些技巧,但我很快就會使用它們:) – Jaeger