1
class Sizes < ActiveRecord::Migration
      def self.up
        create_table :sizes do |t|
          t.integer  :size,     :null => false
        end
      end

      def self.down
        drop_table :sizes
      end
end    

class Sizes < ActiveRecord::Migration
      def self.up
        Size.create(:id => 1, :size => 5)
        Size.create(:id => 2, :size => 10)
      end

      def self.down
        Size.delete_all
      end
end

コマンドを使用してデータベースにデータを入力しようとするとrake db:migrate、次の出力が得られました

select * from sizes;
id          size
1           5
2           10

と呼ばれるコマンドを使用して、dbからテーブル全体をロールバックした後rake db:rollback。もう一度dbを再入力しましたが、次のようになりました

select * from sizes;
id          size
3           5
4           10

主キーを変更したくないのですが、自動インクリメント機能の指定を停止するか、ハードコードされた主キーIDを関連付ける機能を指定して、同じままにする方法を教えてください。

4

2 に答える 2

0

これを試して

create_table(:id => false) do |t|
  t.integer :own_id, :options => 'PRIMARY KEY'
end

お役に立てれば

于 2012-04-20T11:03:42.823 に答える
0

rake db:rollback一歩後退します。この場合、作成したサイズが削除されます(1 => 5、2 => 10)

もう1つ戻ると、テーブルが削除されてから、移行が再度実行され、テーブルとデータが再作成されます。

または、1ステップだけ戻りたい場合は、self.downメソッドでカスタムSQLを実行できます。

def self.down
  Size.delete_all
  execute <<-SQL 
    ALTER TABLE Sizes AUTO_INCREMENT=0 
  SQL
end

また、試すことができます

create_table :sizes, :options => "auto_increment = 0" do |t|
  ...
end
于 2012-04-20T11:04:04.133 に答える