プロジェクトを本番環境に移行するときにデータを入力する必要があるテーブルがいくつかあります。これらのテーブルにはそれぞれ数千行あります。現在、データを CSV ファイルに保存していますが、seed.rb ファイルを使用すると、CSV ファイルのデータをシード.rb 形式に合わせてフォーマットする必要があるため、面倒なようです。これがほんの一握りの行であれば、それほど問題にはなりません。このデータをロードするための最良/最も簡単な方法は何ですか?
5 に答える
おそらく、ちょっとしたカスタム スクリプトと、.csv ファイルをすばやく解析するための優れたツールを備えた、 faster_csv gemを使用するでしょう。次に、フィールドをモデル属性にマップできます。
これを TDD を介してモデル メソッドとして実装し、ActiveRecords の create メソッドを使用してインスタンスをインスタンス化します。これは、SQL を直接記述するよりも時間がかかりますが、データがすべてのモデル検証を通過するという点で安全であり、データの整合性に対する信頼が高まります。
レガシー データのインポートによるデータの整合性の問題を前もって洗い流すことで、後で多くの問題を解決できます。
fast_seedergemが役に立ちます。複数の挿入を使用してCSVファイルからデータベースにデータを入力し、さまざまなDBアダプターをサポートします
MySQL を使用してこれを行う場合、次のような MySQL のデータ読み込み関数を使用します。
load data infile '/my/rails/project/data.csv' テーブル table_name に置換 フィールドは ' field_terminator ' で終了 行は ' line_terminator 'で終了
テーブルのデザインが頻繁に変更されない場合は、そのようなステートメントを perl、ruby、またはシェル スクリプトに入れることができます。
他の人が言及したように、多くのデータベースは一括読み込みをサポートしています。ただし、Rails スタイルのソリューションを探している場合は、ar-extensions には一括挿入があります
ActiveWarehouse をチェックアウトすることもできます