3

ユーザー名と役割と会社の役割テーブルがあります。新しい移行ファイルを介してそのテーブルにデータを挿入したいのですが、どうすればよいですか?

私はこのようなコードを手に入れましたが、どうすればそれを使用でき、どこで理解できないのですか?

class Foo < ActiveRecord::Migration
  def self.up
    Users.new(:username => "Hello", :role => "Admin")
  end
  def self.down
    Users.delete_all(:username => "Hello")
  end
end
4

2 に答える 2

7

これ:

Users.new(:username => "Hello", :role => "Admin")

テーブルにデータを挿入しません。ユーザーオブジェクトを作成するだけです。save作成するオブジェクトで呼び出す必要のあるデータを挿入するには、次のようにします。

Users.new(:username => "Hello", :role => "Admin").save

またはさらに良いことに、create代わりに使用してnewください:

Users.create(:username => "Hello", :role => "Admin")
于 2012-05-11T05:39:18.267 に答える
3

このデータベース移行は、データの入力のみに使用しているようです。

データベースの移行は、データベースにデータを入力するためではなく、データベーススキーマを変更するためのものです(ただし、変更後にデータベースにデータを入力するロジックを追加できます。たとえば、usersテーブルにcolumn-roleを追加すると、カスタムロジックを追加できます。 usersテーブルの既存のエントリに新しく追加されたフィールドに入力します)。詳細については、rails api-- migrationsを参照してください。

以前のデータベース移行でデータベースにデータを入力するためのコードを追加するのを忘れた場合は、以前の移行を元に戻し、次を使用して再度適用できます。

rake db:rollback
... Edit the previous migration ..Add the code to populate
rake db:migrate

データベースにデータを入力するだけの場合は、代わりにデータベースをシードする必要があります。詳細については、このrailscastをご覧ください。

編集:データベースをシードするには:

db/seeds.rbというファイルを作成します
。次のようなレコード作成コードを追加します。

['Sampath', 'Suresh'].each do |name|
  User.create(role: 'admin', username: name)
end

それで、

rake db:seed

これにより、seeds.rbが読み取られ、データベースにデータが入力されます。

于 2012-05-11T05:27:46.353 に答える