2010-09-11 63 views
2

嗨,大家好我有一個模型livestream,它有兩列數據庫'user_id'和'activity_id'。非常直截了當。ruby​​ on rails sql語句錯誤

現在,當我嘗試將多個記錄插入到數據庫中,我得到一個無效的SQL語句:

SQLite3::SQLException: near ",": syntax error: INSERT INTO livestreams (user_id, activity_id) 
      VALUES (1, 2), (101, 2) 

用來做這個來自insoshi,並作爲followes代碼:

def do_livestream_insert(users_ids, activity_id) 
     sql = %(INSERT INTO livestreams (user_id, activity_id) 
       VALUES #{values(users_ids, activity_id)}) 
     ActiveRecord::Base.connection.execute(sql) 
end 

def values(ids, common_value) 
     common_values = [common_value] * ids.length 
     convert_to_sql(ids.zip(common_values)) 
end 

def convert_to_sql(array_of_values) 
     array_of_values.inspect[1...-1].gsub('[', '(').gsub(']', ')') 
end 

爲什麼rails會這樣做? SQLlite是否不支持一次插入多個記錄?

我重置了數據庫,並重新填充它。

感謝您的幫助,非常感謝。

有一個愉快的一天, 斯特凡諾

回答

2

的SQLite did not support多個記錄插入到3.7.11版本。

+0

我該如何使用SQLite3來完成這樣的事情?或者你會推薦使用mysql嗎? – KimJongIl 2010-09-11 13:20:43

+0

最好的選擇是在單個事務中插入多個記錄(適當地更改'do_livestream_insert')。但是如果你不需要SQLite的可移植性,你一定可以切換到MySQL。 – Li0liQ 2010-09-11 19:10:36

+0

SQLite 3.7.11版增加了對多行插入語句的支持。 http://www.sqlite.org/changes.html – yoni 2013-03-27 18:35:33

0

我會建議重新定義do_livestream_insert而不是N插入

+0

爲發展好,但生產? (我在徵求你的意見) – KimJongIl 2010-09-12 07:59:06