2012-06-03 62 views
0

我在Rails 3.0.2上有一個項目。它相當大,並且與MySQL數據庫一起工作良好。 但是,當我嘗試使用SQLite數據庫運行它有遷移過程中出現錯誤:我搜索,發現可能'PRAGMA foreign_keys = ON' SQLite的幫助Rails3 SQLite3 DROP TABLE CASCADE錯誤

SQLite3::SQLException: near "CASCADE": syntax error: DROP TABLE "table_name" CASCADE 

。 因此,我試圖在'DROP TABLE table_name'之前的遷移中添加'execute("PRAGMA foreign_keys = ON")',但這並沒有幫助。

如何將Rails3中的SQLite打開foreign_keys?

寶石版本

  • sqlite3的(1.3.6)
  • sqlite3的,紅寶石(1.3.3)

回答

0

下面是SQLite's DROP TABLE語法圖:

enter image description here

如果圖片移動,語法就像這樣:

drop table if exists db_name.table_name 

其中if existsdb_name.部分是可選的。這裏沒有CASCADE,因此SQLite在使用DROP TABLE時根本不支持CASCADE,並且沒有什麼可以添加它(除非你想破解SQLite C源代碼並自己添加它)。使用SQLite時你必須接受一些限制,這是其中之一。

如果你想爲SQLite和MySQL使用一種遷移,那麼你必須檢查哪個數據庫正在被使用,並執行適當的SQL或找到可在任何地方工作(即手動執行CASCADE)的東西。查看您正在使用的數據庫的簡單方法是:

case connection 
when ActiveRecord::ConnectionAdapters::PostgreSQLAdapter 
    # PostgreSQL things go here 
when ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter 
    # MySQL things go here 
when ActiveRecord::ConnectionAdapters::SQLiteAdapter 
    # SQLite things go here 
... 
end