我有一个以下字符串:
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。
答案 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注入。