这是您所看到的:
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
是一个用双引号括起来的字符串。format
话虽如此,如今与数据库通信的正确方法是使用体面的 ORM。Ruby 有几个,其中我喜欢Sequel。ORM的主要优势在于它消除了代码对数据库使用的语言的密切依赖性。通读它支持的数据库列表,除了连接所需的 DSN 之外,无需更改代码中的任何内容。
Sequel 目前有适用于 ADO、Amalgalite、CUBRID、DataObjects、DB2、DBI、Firebird、IBM_DB、Informix、JDBC、MySQL、Mysql2、ODBC、OpenBase、Oracle、PostgreSQL、SQLAnywhere、SQLite3、Swift 和 TinyTDS 的适配器。
注意,TinyTDS 已列出。
迁移工作,查询工作,插入,删除,更新,一切都是抽象的,当您迁移到更大/其他系统时,这是一个巨大的胜利。您可以从本地 SQLite 开始,使用 MySQL 或 PostgreSQL,然后切换到 Oracle 而无需更改代码,只需调整 DSN。
通读该站点的第一页以及README,您将了解它的易用性,并想知道为什么要以其他方式完成它。