web-dev-qa-db-ja.com

すでにデータベースにあるデータからシードファイルを作成する

Rails 3.0.3を使用しており、データベースに既に「categories」テーブルのデータがありますが、そこからシードファイルを作成したいと考えています。このテーブルから私のためのseeds.rb形式?

50
swrobel

seed_dumpと呼ばれるgemがあります。これはまさにあなたが望むことをします:

63
John Peterson

既存のレーキタスクについてはわかりませんが、Railsコンソールでこのようなものを実行して、結果をseeds.rbファイルに貼り付けてください。

警告:ダーティ&テストなし)

c = Category.all

c.each do |cat|
  puts "Category.create(:name => '#{cat.name}')"
end

追加フィールドがある場合は調整します。

お役に立てれば。

29
Brian

YamlDbを使用して、開発データベースからデータをダンプし、それを別のサーバーにロードしました。データをYamlファイルにダンプします。このファイルは、db:loadを使用して他のdbサーバーにプッシュするたびに使用されます。

https://github.com/ludicast/yaml_db

7
MattSlay

古い質問です。@ Brianの答えに基づいた新しい質問があります。

行全体をそのまま保持する場合:

seedfile = File.open('db/seeds.rb', 'a')

c = Category.all

c.each do |cat|
  seedfile.write "Category.create(#{cat.attributes})\n"
end

seedfile.close

一部の属性のみを書き込みたい場合は、書き込み行を次のように変更します。

seedfile.write "Category.create(#{cat.attributes.slice('attr1', 'attr2', ...})\n"

または、タイムスタンプなど、一部を除くすべての属性が必要な場合:

seedfile.write "Category.create(#{cat.attributes.except('created_at', 'updated_at')})\n"
5
Ruby Racer