Ruby:用双引号引起来的双引号

时间:2019-08-02 18:10:39

标签: ruby-on-rails ruby postgresql

我在SO中到处搜索,没有任何麻烦。基本上,我有这种数组:

["a", "b", "c"]

我需要用双引号将双引号引起来,就像这样:

['"a"', '"b"', '"c"']

为什么需要包装此数组元素的主要原因是因为我需要在数据库(PostgreSQL)中查询jsonb对象。查询示例如下:

data -> '#{af.column}' @> any(array#{@arr}::jsonb[])

要查询jsonb对象,我需要为每个元素加上单引号。

更新

为什么我需要这样做?这是因为,我需要将多个查询组合到一个数组中。下面是我的示例代码:

    @conditions = args[:conditions] unless !args[:conditions].present?
    @tables = ["assigned_contact"]
    @query = self.joins({:assigned_contact => :call_campaign_answers})
      .where(@conditions.join(" AND "))
      .where("(data->>'age')::int between ? and ?", args[:min_age].to_i, args[:max_age].to_i)
      .where("data -> 'gender' @> any(array[?]::jsonb[])", args[:gender].map(&:to_json))
      .where("call_campaign_answers.answer IN (?)", args[:answers]).size

其中args [:conditions]是我的查询,我需要用双引号将双引号引起来。

如果还有其他简单/方法可用,请告诉我。

2 个答案:

答案 0 :(得分:1)

我看到的问题是您没有返回单个JSON数组,而是返回了多个独立的数组,这可能是语法错误。使用单个JSON值:

{{1}}

答案 1 :(得分:0)

假设

ary = %w[a b c]
#=> ["a", "b", "c"]

然后

new_ary = ary.map {|el| %Q["#{el}"] }

精确地产生您想要的输出:

new_ary == ['"a"', '"b"', '"c"']
#=> true