0

移行を使用して、1つのテーブルに1つの列を追加しようとしています。そのための移行を作成して実行rake db:migrate:up[version]し、テーブルに列を追加しましたが、それぞれのモデルにその属性が表示されません。私はここで何かすることが欠けていますか?以下は私のスニペットです...

migration 6, :add_role_users do
  up do
    execute <<-SQL
      ALTER TABLE users
        ADD COLUMN role varchar(32) DEFAULT NULL
    SQL
  end
  down do
    execute <<-SQL
      ALTER TABLE users
        DROP COLUMN role
    SQL
  end
end

上記の移行を実行した後、ユーザーモデルに以下の行が表示されません

property :role, , String, :length => 32

Rails 3.0を使用しているため、移行の変更方法を使用できないことをお勧めします。

4

1 に答える 1

1

Rails は、テーブルの列に基づいてモデル属性を自動的に検出して割り当てます。これがどのように行われるかについての一般的な情報については、このガイドが非常に貴重です: http://guides.rubyonrails.org/migrations.html

とにかく、テーブルにrole列を追加する移行を実行する方法は次のusersとおりです。

  1. コンソールで、 を実行しますrails g migration add_role_column_to_users role:string(マイグレーション名は「users」で終わるため、Rails はこのマイグレーションを users テーブルに適用することを自動的に認識します。指定role:stringは、マイグレーションに自動的に追加される単なるコマンド ライン ショートカットですt.add_column :role, :string。このコマンドを実行すると、新しいdb/migrate/アプリのディレクトリに移行します。)

  2. コンソールで実行rake db:migrateして、データベースを新しいスキーマに移行します。

  3. それでおしまい!これで、「users」テーブルに「role」列ができたはずです。これを確認するには、Rails コンソールに を入力rails cし、ユーザー モデルの列名を で表示しUser.column_namesます。そこに「役割」が表示されるはずです。

于 2012-10-18T22:27:18.070 に答える