8

たとえば、私はこのモデルを持っています:

class Product < ActiveRecord::Base
  attr_accessible :name, :order
end

それから私がrake db:migrateそれをしたときそれはこのdb/migrate / 20120825132038_create_products.rbを作成しました:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.integer :order
      t.string :name

      t.timestamps
    end
  end
end

しかし、それはすべて私が使用したので起こりましたrails generate Product order:integer name:string

製品モデルに移動し、手動で次のように変更した後、次のようになります。

class Product < ActiveRecord::Base
  attr_accessible :name, :order, :category_id

  validates :name, uniqueness: true
  belongs_to :category
end

db / migrate / 20120825132038_create_products.rbを更新で自動更新するにはどうすればよいですか?

4

2 に答える 2

17

実行したときrake db:migrate、作成されませんdb/migrate/20120825132038_create_products.rbでした。その移行ファイルは、実行時に作成されました

rails generate Product order:integer name:string

attr_accessibleデータベースの移行とは何の関係もありません。

Rails Guide on Migrationsと、について説明している一括割り当てのセクションを読むことを強くお勧めしますattr_accessible

新しい移行ファイルを生成するには(質問に記載されているファイルは、実行中の前のコマンドですでに処理されているためrake db:migrate、次のコマンドを実行します。

rails g migration AddCategoryIdToProduct category_id:integer

これにより、次のようなコンテンツで新しい移行が生成されます。

class AddCategoryIdToProduct < ActiveRecord::Migration
  def change
    add_column :products, :category_id, :integer
  end
end

ここで再度実行すると、この移行ファイルが処理され、新しい整数列がテーブルrake db:migrateに追加されます。category_idproducts

于 2012-08-25T13:24:30.477 に答える
7

を実行して移行をやり直すことができます

rake db:migrate:up VERSION=20121031143418 #insert the timestamp on migration

移行をやり直すこともできます(上下に実行されますが、上下がある場合にのみ機能します。変更があった場合は機能しません)。

rake db:migrate:redo
于 2012-10-31T14:55:02.733 に答える