这里就是你所看到的:
ary = ['value 1', 'value 2', 'value 3']
"#{ ary }" # => "[\"value 1\", \"value 2\", \"value 3\"]"
这是“检查”输出,因使用Array.to_s AKA Array.inspect。看着它像我们通常看到:
puts "#{ ary }"
# >> ["value 1", "value 2", "value 3"]
下面是如何解决它:
sql = "INSERT INTO my_table VALUES(#{ ary.map{ |i| '"%s"' % i }.join(', ') })"
# => "INSERT INTO my_table VALUES(\"value 1\", \"value 2\", \"value 3\")"
puts sql
# >> INSERT INTO my_table VALUES("value 1", "value 2", "value 3")
'"%s"' % i
是String format
它包装在双引号的字符串。
这就是说,现在与数据库进行通信的正确方法是使用体面的ORM。 Ruby有几个,我赞成Sequel。对于ORM,主要 win会消除代码对数据库使用的语言的紧密依赖关系。请仔细阅读它支持的list of databases,而无需在连接所需的DSN之外更改代码中的任何内容。
续集目前拥有ADO,Amalgalite,CUBRID,数据对象,DB2,DBI,火鸟,IBM_DB,Informix的,JDBC,MySQL和Mysql2,ODBC,OpenBASE的,甲骨文和PostgreSQL,SQLAnywhere的,sqlite3的,斯威夫特和适配器TinyTDS。
通知,TinyTDS上市。
迁移工作,查询工作,插入,删除,更新,一切都被抽象化,这是因为你迁移到更大/其他系统的一个巨大的胜利。您可以从本地开始使用SQLite,使用MySQL或PostgreSQL,然后切换到Oracle而无需更改代码,只需调整DSN即可。
通读本网站的第一页,以及the README,您将了解到它的使用是多么容易,并想知道为什么您以任何其他方式完成它。
哦,你是我的英雄先生!我一直试图使用join(','),但它给了我一个错误。谢谢!可以在10分钟内接受答案。 – hyphen
不要使用'inspect',这是一个非常容易出错的方式来完成一个非常简单的问题。在调试过程中检查对象时,可以覆盖'inspect'以提供自定义输出,这会影响您正在查找的输出。 –
@theTinMan然后你会建议什么呢?另外,我不知道你为什么要重写'inspect'的字符串... – Doorknob