如何指定没有自动增量的默认主键

时间:2012-04-20 10:28:24

标签: ruby-on-rails

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的命令从db回滚整个表之后。我再次重新填充数据库,现在它似乎是以下

select * from sizes;
id          size
3           5
4           10

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

2 个答案:

答案 0 :(得分:0)

试试这个

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

希望这有帮助

答案 1 :(得分:0)

rake db:rollback会退后一步,在您的情况下会删除您创建的尺寸(1 =&gt; 5,2 =&gt; 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