ruby:用其他引号包装数组的每个元素

时间:2015-05-16 14:29:04

标签: ruby-on-rails ruby

我有一个以下字符串:

a = "001;Barbara;122"

我分成了一串字符串:

names = a.split(";")
names = ["001", "Barbara", "122"] 

我应该怎样做才能将每​​个元素另外包装在''引号中? 结果应该是

names = ["'001'", "'Barbara'", "'122'"]

我知道这听起来很奇怪,但我需要它在ruby on rails上进行数据库查询。出于某种原因,如果我的名字在“”引号中,我就无法访问数据库记录。我在数据库中有mk1 == 0006但是rails不想以某种方式访问​​它。但是,它确实访问了1222。

sql = "SELECT mk1, mk2, pk1, pk2, pk3, value_string, value_number FROM infos WHERE mk1 in (0006) AND value_string ='männlich';"         
recs = ClinicdbInfo.find_by_sql(sql)     
=> [] 

sql = "SELECT mk1, mk2, pk1, pk2, pk3, value_string, value_number FROM infos WHERE mk1 in (1222) AND value_string ='männlich';"         
recs = ClinicdbInfo.find_by_sql(sql)     
 => [#<Info mk1: "1222", mk2: "", pk1: "Information allgemein", pk2: "Geschlecht", pk3: "Wert", value_string: "männlich", value_number: nil>] 

所以,我只需要将名字的每个元素包装成额外的''-quotes。

2 个答案:

答案 0 :(得分:18)

names.map{ |e| "'" + e + "'" }
=> ["'001'", "'Barbara'", "'122'"]

names.map{ |e| "'#{e}'" }
=> ["'001'", "'Barbara'", "'122'"]

答案 1 :(得分:2)

你不应该手动将参数连接到sql字符串;您应该将参数传递给find_by_sql方法。例如:

sql = "SELECT mk1, mk2, pk1, pk2, pk3, value_string, value_number FROM infos WHERE mk1 in (?) AND value_string = ?"         
recs = ClinicdbInfo.find_by_sql [sql, 1222, "männlich"]

这样,Rails将处理必要的类型转换和转义以防止sql注入。