2009-05-14 5 views
1
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, или я придирчиваюсь?Вопрос о рубиновом стиле от новичка

ответ

4

Помимо петли в ответе hypoxide, также рассмотреть вопрос об использовании переменной интерполяции:

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

Обратите внимание, что лучше все продезинфицировать ваши entry элементов, или быть готовыми к миру боли, Bobby Tables стиля.

+2

проклятых ... бить меня это :) –

+1

* лол * Я пошел целые боры и избегал использования + на всех, но это только мое предпочтение. :-P –

+1

Мне это очень нравится. Мне нужно научиться думать так. – rubynewbie

1

Вы можете написать цикл for для строки ... вы бы сохранили несколько строк кода.

1

Как насчет:

" VALUES (#{entry.collect{|e|"'"+e.to_s+"'"}.join(",")})" 
Смежные вопросы