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

在我使用名为rake db:rollback. 我再次重新填充了数据库,现在它似乎如下

select * from sizes;
id          size
3           5
4           10

我不希望主键改变,如何停止指定自动递增功能或指定关联硬编码主键 id 的能力,使其保持不变。

4

2 回答 2

0

rake db:rollback会让您后退一步,在您的情况下,这将删除您创建的尺寸 (1 => 5, 2 => 10)

您可以再退一步,这将删除表,然后再次运行迁移,重新创建表和数据。

或者,如果您只想返回一步,那么您可以在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 回答
0

尝试这个

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

希望这可以帮助

于 2012-04-20T11:03:42.823 回答