来自新手的红宝石风格问题

时间:2009-05-14 02:03:00

标签: ruby string coding-style

USER = "user"
PASS = "pass"

QUERY = "SELECT c1, c2, c3, c4, c5, c6, c7 FROM table"

SQLITE_SCHEMA = 'c1, c2, c3, c4, c5, c6, c7'

sqlite_db = SQLite3::Database.new('sqlite.db')
odbc_db = DBI.connect('DBI:ODBC:database', USER, PASS)
odbc_db.select_all(QUERY) do |entry|
  sqlite_db.execute "insert into smnt (" + SQLITE_SCHEMA + ") values ('" + entry[0].to_s + "','" + 
                                                                           entry[1].to_s + "','" + 
                                                                           entry[2].to_s + "','" +
                                                                           entry[3].to_s + "','" +
                                                                           entry[4].to_s + "','" + 
                                                                           entry[5].to_s + "','" +
                                                                           entry[6].to_s + "')" 
  end

必须有更简洁的方法来编写db.execute字符串,还是我挑剔?

3 个答案:

答案 0 :(得分:4)

除了氧化物答案的循环外,还要考虑使用变量插值:

sqlite_db.execute "insert into smnt (#{SQLITE_SCHEMA}) 
  values (#{entry.map {|e| "'#{e.to_s}'"}.join(',')})"

请注意,您的entry元素最好全部消毒,或者为痛苦的世界做好准备,Bobby Tables风格。

答案 1 :(得分:1)

你可以为字符串写一个for循环......你可以保存几行代码。

答案 2 :(得分:1)

怎么样:

" VALUES (#{entry.collect{|e|"'"+e.to_s+"'"}.join(",")})"