【问题标题】:Can't get rid of some characters when pushing string to array将字符串推送到数组时无法摆脱某些字符
【发布时间】:2017-05-06 22:14:25
【问题描述】:

我正在创建某种自定义标签,稍后我将使用它们来过滤一些数据。但是,当我在数组中添加标签时,我得到以下信息:

"[\"巫师 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 不起作用?

提前谢谢你

【问题讨论】:

    标签: ruby-on-rails arrays tags


    【解决方案1】:

    您在@tag 中设置一个字符串数组,\" 代表一个escaped character,在这种情况下" 被ruby 用来代表String 对象。

    考虑以下代码(在 IRB 上试一试):

    foo = ["bar", "baz"]
    #=> ["bar", "baz"]
    
    foo.inspect
    #=> "[\"bar\", \"baz\"]"
    
    foo.each { |f| puts "tag: #{f}" }
    # tag: bar
    # tag: baz
    

    如您所见,实际上没有可从字符串中删除的 \ 字符,这正是 ruby​​ 输出 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"]
    

    【讨论】:

    • 这是我第一次认为堆栈溢出问题不是一个问题。谢谢你的亮点!
    • @Jaeger 很高兴为您提供帮助!另请查看更新的答案以获取有关您的代码的其他提示。
    • 谢谢,这些技巧我已经知道了,不过我很快就会用上的:)
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多