2012-03-10 15 views
4

您好我有一個sqlite3數據庫充滿了我以前版本的web應用程序的數據,而這些數據並沒有寫在rails中。我現在重新從頭開始重新編寫web應用程序。但我喜歡在新的Rails應用程序中使用我之前的應用程序中的數據。什麼是最好的方式來實現這一目標?將數據導入到我的新rails應用程序的最佳方法是什麼?

這是香港專業教育學院迄今嘗試過,並沒有很好地工作: 1)我創建了一個新的Rails應用程序

2)取代了我的sqlite3的數據庫在新的應用程序與數據庫sqlite3的從舊應用程序

3)創建一個與舊數據庫具有相同架構的模型。

4)改變了databse.yml文件與更新的數據庫文件的詳細信息

5)未經我的模型添加了「establish_connection」方法

6),因此我能得到它給我看所有的細節我的瀏覽器中的舊數據庫@「index.html」

7)但是,當我想要插入/編輯記錄到數據庫時遇到了問題。由於數據庫沒有每行的主鍵列,因此它沒有用。

8)所以我試圖做一個遷移來添加一個主鍵的列。它沒有工作

9)突然一個新的發展.sqlite3數據庫已經顯示在應用程序,它試圖添加一個主鍵到NEW DB。

10)所以我就刪除了已彈出,之後的應用程序不能正常工作

11條新的DB)現在我要從頭開始,因此我的問題開始: 「什麼是最好的方式從以前的非rails應用程序(以sqlite3數據庫格式)導入數據到一個新的rails應用程序「

+0

可以使用傳統數據庫,但除非您提供諸如「遇到問題」和「無法使用」等短語的詳細信息,否則我們無法幫助您。 – 2012-03-10 16:34:09

+0

你也可以用gem https://github.com/igorkasyanchuk/rails_db – 2015-12-02 08:10:16

回答

5

您希望使用2個數據庫,舊的和新的。所以,你的database.yml需要有2個連接。一個應該是你的正常連接,稱爲開發或生產,另一個應該被稱爲遺留。填寫他們的不同的連接信息。默認情況下,你的ActiveRecord模型將從一個不被稱爲傳統的模型拉動。

創建一個名爲LegacyBase的模型。在模型中放establish_connection "legacy"。現在在app/models/legacy上創建一個目錄。將所有模型代表來自舊DB的數據放入此目錄中。所有這些模型都應該從LegacyBase擴展。這意味着他們都是從舊數據庫中讀取數據。

創建您的新模型。你想讓他們有一個主鍵列嗎?如果沒有,請參閱此答案。 Create an ActiveRecord database table with no :id column?。他們將默認有一個ID列,但我建議這樣離開它。

對於每個遺留模型,編寫一個名爲to_model的方法。在此方法中,編寫用於創建新對象的代碼並使用舊數據填充並保存它。這樣的事情:

class OldUser < LegacyBase 

    establish_connection "legacy" 

    def to_model 
     User.create!(self.attributes) 
    end 
end 

你可以做任何需要發生的邏輯,使舊數據適合你的新應用程序。在所有舊記錄(如OldUser.all.map(&:to_model))上調用此方法。

對所有要移動的表執行此操作。

+0

爲你導入SQL。謝謝你的詳細解答。對此,我真的非常感激。爲了得到一些基本的東西,我一直在爲Rails掙扎幾天。 – banditKing 2012-03-10 17:27:25

+0

這個工作適合你嗎?我有問題。我得到: 未初始化的常量LegacyBase(NameError)。是否有關於如何創建子模型以及將它們放在哪裏的更完整說明?甚至是示例代碼? – danv 2012-05-01 06:37:16

相關問題