簡體   English   中英

將數據導入我的新rails應用程序的最佳方式?

[英]Best way to import data into my new rails app?

嗨,我有一個sqlite3數據庫,其中包含我之前版本的Web應用程序中的數據,這些數據不是用rails編寫的。 我現在從頭開始在rails中重寫web應用程序。 但我想在新的rails應用程序中使用我以前的應用程序中的數據。 什么是實現這一目標的最佳方式?

這是我到目前為止所嘗試的並且它不能很好地工作:1)我創建了一個新的rails應用程序

2)使用舊應用程序中的sqlite3數據庫替換新應用程序中的sqlite3數據庫

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

4)使用更新的DB文件詳細信息更改了databse.yml文件

5)un我的模型添加了“establish_connection”方法

6)我可以讓它在我的瀏覽器@“index.html”中向我展示舊數據庫的所有細節

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

8)所以我嘗試進行遷移以添加帶主鍵的列。 它沒有用

9)突然在應用程序中出現了一個新的development.sqlite3數據庫,它正在嘗試向新數據庫添加主鍵。

10)所以我剛剛刪除了彈出的新數據庫,之后應用程序無法運行

11)現在我想從頭開始,所以我的問題是:“什么是將數據從以前的非rails應用程序(以sqlite3數據庫格式)導入到新的rails應用程序中的最佳方式”

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

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

創建新模型。 你想讓他們有一個主鍵列嗎? 如果沒有,請參閱此答案。 創建一個no:id列的ActiveRecord數據庫表? 默認情況下,它們會有一個id列,我建議保留這種方式。

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

class OldUser < LegacyBase

    establish_connection "legacy"

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM