這裏就是你所看到的:
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