何が最良の方法種データベースレール?
-
11-09-2019 - |
質問
いrakeタスクpopulates初期データの私のレールアプリです。例えば、国、携帯キャリア等
にしていませていただくとともに、現在はいった計算書の作成、ファイル/db/備品、rakeタスクをプロセスです。例えば、モデルにしています。しています。rbのファイル/db/器具のようになります:
Theme.delete_all
Theme.create(:id => 1, :name=>'Lite', :background_color=>'0xC7FFD5', :title_text_color=>'0x222222',
:component_theme_color=>'0x001277', :carrier_select_color=>'0x7683FF', :label_text_color=>'0x000000',
:join_upper_gradient=>'0x6FAEFF', :join_lower_gradient=>'0x000000', :join_text_color=>'0xFFFFFF',
:cancel_link_color=>'0x001277', :border_color=>'0x888888', :carrier_text_color=>'0x000000', :public => true)
Theme.create(:id => 2, :name=>'Metallic', :background_color=>'0x000000', :title_text_color=>'0x7299FF',
:component_theme_color=>'0xDBF2FF', :carrier_select_color=>'0x000000', :label_text_color=>'0xDBF2FF',
:join_upper_gradient=>'0x2B25FF', :join_lower_gradient=>'0xBEFFAC', :join_text_color=>'0x000000',
:cancel_link_color=>'0xFF7C12', :border_color=>'0x000000', :carrier_text_color=>'0x000000', :public => true)
Theme.create(:id => 3, :name=>'Blues', :background_color=>'0x0060EC', :title_text_color=>'0x000374',
:component_theme_color=>'0x000374', :carrier_select_color=>'0x4357FF', :label_text_color=>'0x000000',
:join_upper_gradient=>'0x4357FF', :join_lower_gradient=>'0xffffff', :join_text_color=>'0x000000',
:cancel_link_color=>'0xffffff', :border_color=>'0x666666', :carrier_text_color=>'0x000000', :public => true)
puts "Success: Theme data loaded"
このアイデアは付けたいの一部の株式のテーマのユーザーに望ましいです。いないこと。
設定のIDは動作しません。この場合はどうしたらよろしいですか追加テーマにしましょう呼んでいることは、"赤"というだけで追加対象のテーマを決めこの治具ファイルのキタreseedのデータベースです。ばしたいと思っているなら、テーマは所属の他のオブジェクトとそのidの変更にこの再初期化全てのリンクが壊れる。
私の質問は、この良い方法で取扱いを播種データベース?前の投稿、おすすめです。
の答えを見出さなければならないたいのでハードコードのIdであるマイナス面す。
ない場合は、何の種のデータベース?
いいただき、ありがとうござい長いという回答を盛り込んだベストプラクティスに関する
解決
更新。
シンプルな機能では、レール2.3.4で追加され、デシベル/ seeds.rb
新しいrakeタスクを提供します
rake db:seed
などの州、国、のような一般的な静的レコードを取り込むための良い...
http://railscasts.com/episodes/179-seed-dataする
*すでにまた、DBを取り込むためにそれらを作成した場合は、器具を使用できることに注意してください:(railscastエピソードから)あなたのseeds.rbファイルに次のように置くことによって、シードタスクます:
require 'active_record/fixtures'
Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "operating_systems")
のRails 3.xの使用 'のActiveRecord ::備品' の代わりに '備品' 定数
require 'active_record/fixtures'
ActiveRecord::Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "fixtures_file_name")
他のヒント
通常の2種類があり種のデータが必要です。
- 基礎データ によるコアのアプリケーションに依存している私はこの共通する。
- 環境データ, 例えば開発のアプリにおいてチームのデータを既知の状態で使用のためのアプリに現地の工場の女の子の回答上のカバーはこの種のデータ。
私の経験したについての必要性がこれらの二種類のデータです。もっと 小さな逸品で伸びるレールの種子 ときは、多種共通ファイルのdb/種子、その他の環境種のデータdb/種子/環境例えばdb/種子/開発。
なんでこのアプローチは私種データの一部構造と、この電力設定を自開発環境で知られる状態だけで走る:
rake db:setup
具脆弱で、flakey維持、通常のsqlダン.
factory_bot に聞こえます。あなたはデフォルトの定義では、すべての共通の属性を定義し、作成時にそれらを上書きすることができます。また、工場出荷時にIDを渡すことができます:
Factory.define :theme do |t|
t.background_color '0x000000'
t.title_text_color '0x000000',
t.component_theme_color '0x000000'
t.carrier_select_color '0x000000'
t.label_text_color '0x000000',
t.join_upper_gradient '0x000000'
t.join_lower_gradient '0x000000'
t.join_text_color '0x000000',
t.cancel_link_color '0x000000'
t.border_color '0x000000'
t.carrier_text_color '0x000000'
t.public true
end
Factory(:theme, :id => 1, :name => "Lite", :background_color => '0xC7FFD5')
Factory(:theme, :id => 2, :name => "Metallic", :background_color => '0xC7FFD5')
Factory(:theme, :id => 3, :name => "Blues", :background_color => '0x0060EC')
偽物で使用する場合、それは備品(不潔)で約混乱することなく、本当にすぐ団体とデータベースを作成することができます。
私はrakeタスクでは、このようなコードを持っています。
100.times do
Factory(:company, :address => Factory(:address), :employees => [Factory(:employee)])
end
seeds.rb
ファイルまたはFactoryBot
を使用して素晴らしいですが、これらはそれぞれ、固定データ構造とテストに最適です。
seedbank
の宝石は、あなたの種子へのより多くの制御とモジュール性を与えるかもしれません。それはすくいタスクを挿入し、また、あなたの種間の依存関係を定義することができます。あなたのrakeタスクリストは、(例えば)これらの追加があります。
rake db:seed # Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/ENVIRONMENT/*.seeds.rb. ENVIRONMENT is the current environment in Rails.env.
rake db:seed:bar # Load the seed data from db/seeds/bar.seeds.rb
rake db:seed:common # Load the seed data from db/seeds.rb and db/seeds/*.seeds.rb.
rake db:seed:development # Load the seed data from db/seeds.rb, db/seeds/*.seeds.rb and db/seeds/development/*.seeds.rb.
rake db:seed:development:users # Load the seed data from db/seeds/development/users.seeds.rb
rake db:seed:foo # Load the seed data from db/seeds/foo.seeds.rb
rake db:seed:original # Load the seed data from db/seeds.rb
Railsははここを説明したようにデータをシードする方法が組み込まれています。
もう一つの方法は、以下のような、より高度なまたは簡単に播種するために宝石を使用することです: seedbankする
この宝石の主な利点と、私はそれを使用する理由は、それは、そのようなデータロードの依存関係と環境ごとのシード・データなどの機能を進んでいるということです。
この答えは、最初にGoogleであったように、の日付の解答までの追加。の
彼らは更新としてそのように誰もがそれを取得し、データベースの移行にそれを追加します。ルビー/レールコードであなたのロジックのすべてを扱うので、あなたは、明示的なIDの設定を台無しにしていません。
最良の方法は、器具を使用することです。
注:備品が直接挿入を行うと、あなたは回避策を見つける必要がありますデータを読み込むコールバックを持っているので、もし、あなたのモデルを使用していないことに注意してください。