2017-05-06 52 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