映射函数返回带括号和引号的变量

Map function returning variables with brackets and quotes

我正在尝试使用 pipedrive-ruby 和 Sequel gem 从 JSON 哈希中检索数据并将其存储到数据库,但它总是 returns 值在每个单元格中加上引号,在字符串的开头和结尾加上方括号。我该如何解决?

代码:

query_values = activities.map do |activity|
 "#{activity['id']}"
end

query = "INSERT INTO pd_activities (id) VALUES (#{query_values})"
insert_ds = DB[query]
insert_ds.insert

这是尝试插入数据库时​​的错误:

/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.34.0/lib/sequel/adapters/postgres.rb:186:in `async_exec': PG::SyntaxError: ERROR:  syntax error at or near "[" (Sequel::DatabaseError)
LINE 1: INSERT INTO pd_activities (id) VALUES (["72943", "73532", "7...

您以不正确的方式使用字符串插值将值包含到 SQL 语句中。

这将起作用,而不是:

query = "INSERT INTO pd_activities (id) VALUES ("#{query_values.join(', ')}")"

如果activities中的值为整数,则可以避免activities.map步骤中的字符串插值。为此,只需使用:

query_values = activities.map {|activity| activity['id'] }

如果activities = [12, 34, 98, 142],这将产生:

"INSERT INTO pd_activities (id) VALUES (12, 34, 98, 142)"

但是,如果 activities 中的值是字符串,您应该改为这样做:

query_values = activities.map {|activity| "'#{activity['id']}'" }

如果activities = ["12", "34", "98", "142"],这将产生:

"INSERT INTO pd_activities (id) VALUES ('12', '34', '98', '142')"