2011-03-14 3 views
1

これを行う方法を忘れてしまい、インターネット上で役立つチュートリアルを見つけることができません。移行中にデータベーステーブルにエントリを追加するにはどうすればよいですか?

dbテーブルを設定し、移行中にデータを入力することは可能です。

私はdb "persons"t.column :name => :stringとしており、dbs作成後に人を追加したいと考えています。それはPerson.add :name => "Nobody"のようなものだった...しかし、私はメソッドが正確にどのように呼び出されたか忘れてしまった。

答えて

2

seed.rb.にkrunal Shahのサンプルを使用してみてくださいPerson.create(:name => 'nobody')

+0

これは単純な質問ですが、メソッド名を忘れてしまったとき....... –

+2

これがあなたの答えであれば答えです。 –

+1

もっと強力な 'Person.create! 'を使いたいかもしれません。 [バンとの]バージョン(http://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-create-21)は、保存できないときに例外を発生させます。検証の問題が原因です。 – berkes

0

。これを試してみてください次に、rakeタスクを実行してください。rake db:seed

+0

それはself.upで動作します。最初にテーブルの作成とこのPerson.createの下に.... –

0

移行で新しいデータを作成しないでください。あなたは既存のデータを変更することができます。

データベースを書き込むには、seedsを使用してください。

これは、スキーマの定義(移行)と正しいデータでの埋め込みを明確に区別するためです。シードを頻繁に変更する必要があると見なすことができます(新しいルックアップ値が追加されたなど)。データベースをシードするのは簡単なステップです。繰り返しが可能で、残りのデータには影響しません。

+0

私は同意しません。たとえば列挙型を実際のモデルに抽出すると、いくつかのデータを「作成」するのは完全に理にかなっています。あなたが 'admin'や' visitor'である 'User.role'を持っていて、後で' roles'テーブルで本格的な 'Role'モデルにすることを決めたとしましょう。実際には'移行時に「ロール」を選択します。 – berkes

+0

私はあなたの視点を理解しています。つまり、私はスキーマ定義からデータを分離することを好みます。私のデータは私のスキーマよりも頻繁に変わると思う。デプロイ時には常にマイグレーションとシードの両方を実行します。また、 'schema.rb'のデータがどうなっているのかよくわからないので、' rake db:setup'も動作しますか? – nathanvda

関連する問題