![](/img/trans.png)
[英]Considering a new Rails app with existing data (not a db, actual data) — what is the best way to proceed?
[英]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.