2012-03-10 14 views
4

こんにちは私は、レールで書かれていない私の以前のバージョンのWebアプリケーションからのデータでいっぱいのsqlite3データベースを持っています。私は今、最初からレールでWebアプリケーションを書き直しています。しかし、IDは新しいレールアプリで私の以前のアプリからのデータを使用するのが好きです。これを達成する最良の方法は何ですか?新しいレールアプリにデータをインポートする最も良い方法は?

これは、アイブ氏はこれまでに試した、それは非常にうまく機能していなかったものです:私は新しいレールアプリ

2を作成した) 1)は、古いからsqlite3のデータベースに新しいアプリで自分のsqlite3のデータベースを置き換えますapp

3)古いDBと同じスキーマを持つモデルを作成しました。

4)を更新DBファイルの詳細

5)でdatabse.ymlファイルを変更し、国連私のモデル「establish_connection」方法

6)私は、このようにそれは私にすべての詳細を表示するように得ることができるを追加しました私のブラウザで古いデータベースの "index.html"

7)しかし、私はDBにレコードを挿入/編集したいときに問題に遭遇しました。 DBは各行にプライマリキー列を持たなかったので、動作しませんでした。

8)私は、主キーを持つ列を追加するために移行を試みました。それは仕事をしなかった

9)突然新しいdevelopment.sqlite3データベースは、アプリケーションに表示されていたし、新しいDBに主キーを追加しようとしていた。

10)だから、僕はポップアップした新しいDBを削除し、その後アプリが

11を働いていませんでした)今、私はゼロからスタートし、そう私の質問したい:最良の方法を 「をいただきました!以前の非レールアプリケーション(sqlite3 DB形式)から新しいレールアプリにデータをインポートする "

+0

レガシーDBを使用することは可能ですが、「問題に遭遇しました」や「うまくいきませんでした」などのフレーズの詳細を指定しない限り、サポートはできません。 –

+0

gemを使用して後でSQLをインポートすることもできます。https://github.com/igorkasyanchuk/rails_db –

答えて

5

2つのデータベース、古いものと新しいものを使いたいと思っています。したがって、database.ymlには2つの接続が必要です。 1つは開発または生産と呼ばれる通常の接続で、もう1つはレガシーと呼ばれるべきです。それらの別の接続情報を記入してください。デフォルトでは、ActiveRecordモデルはレガシーと呼ばれていないモデルから引き出されます。

LegacyBaseというモデルを作成します。モデルではestablish_connection "legacy"を入れてください。次に、app/models/legacyにディレクトリを作成します。すべてのモデルは、古いDBからのデータを表します。これらのモデルはすべてLegacyBaseから拡張する必要があります。これは、古いDBからすべて読んでいることを意味します。

新しいモデルを作成します。それらに主キー列を持たせますか?そうでない場合は、この回答を参照してください。 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

詳細な回答ありがとうございます。ほんとうにありがとう。いくつかの基本的なことをするためにRailsに数日間苦労しました。 – banditKing

+0

これはあなたのためにできましたか?私は問題を抱えています。私は 初期化されていない定数LegacyBase(NameError)を取得します。サブモデルの作成方法と配置場所の完全な説明はありますか?あるいはサンプルコードですか? – danv

関連する問題