我在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]是我的查询,我需要用双引号将双引号引起来。
如果还有其他简单/方法可用,请告诉我。
答案 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