答えて
は、器具にガイドレール上のRubyをチェックアウト:
http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures
一般的に、あなたはtest/
ディレクトリにYAMLフィクスチャファイルを作成し、rake db:fixtures:load
コマンドを使用してデータベースにロードすることができます。あなたが固定具を行うことができ、すべてのクールなものの完全なドキュメントはこちらです:
YAMLファイル、例えば解析するdb/seeds.rb
にコードを追加します。単にYAMLを置き、その後
seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
Category.create!(config)
をfoo in db/seeds/categories.yml
。 YAMLファイルは、連想配列のリストでなければなりません。例:
- name: accessory
shortcode: A
- name: laptop
shortcode: L
- name: server
shortcode: S
は、このソリューションの問題点は、 'すくいデシベルを実行した場合ということです。seed'秒時間、あなたは重複の束を得るでしょう。一意性の要件に応じて、おそらく最後の行を次のように変更したいでしょう: 'config.each {| values | Category.first_or_create(values)} ' – sberkley
どのような状況でデータベースを2回シードしますか? 'rake db:reset'は99%の時間を必要とします。 – Zaz
新しいシード値をテーブルに追加するか、シード値付きの新しいテーブルを追加する場合。データベース全体を削除することは、開発環境の解決策になるかもしれませんが、実際には生産段階にはありません。再シーディングの前にシードされたテーブルを削除することは、そのテーブルのIDへの参照が別のテーブルにある場合、オプションではありません。以前にシードされた値を削除する必要がある場合、状況はさらに複雑になり、 'rake db:seed'以外の解決策が必要になるかもしれません。 – sberkley
回答は@Zazが答えました。それはとてもうまくいく。
しかし、一方では何かが(たとえば、あなたが非常に大きいシードYAMLファイルを持っている)あなたのシード・データを間違っていた場合、あなたは間違っていたあなたのYAMLのどの部分知っていただきたいと思います。その時点で、作成後にブロックを追加することができます。このようなデバッグのために:
seed_file = Rails.root.join('db', 'seeds', 'categories.yml')
config = YAML::load_file(seed_file)
counter = 0
Category.create!(config) do |c|
puts "Create category #{counter += 1} with name: #{c.name}"
end
受け入れ答えは大きくないと見て( 'テスト/'ディレクトリにシード・データを置く)、および[私の答え](http://stackoverflow.com/a/24957205/405550 )は、より多くのupvotesを持っている、あなたは私の受け入れを検討していただけますか? – Zaz