2012-04-20 82 views
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填充db和我得到了以下输出如何指定没有自动递增

select * from sizes; 
id   size 
1   5 
2   10 

后,我回滚整个表从数据库使用命令rake db:rollback。我再次重新填充数据库,现在它似乎是以下

​​3210

我不想主键来更改,如何停止指定自动递增功能或指定关联起来的能力硬编码的主键ID,以便它保持不变。

回答

0

试试这个

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

希望这有助于

+0

感谢您的回复!我试过但它不适合我。 – diya 2012-04-20 11:17:15

+0

你能指定你正在使用哪个版本的导轨吗? .. – 2012-04-24 01:40:43

+0

使用Rails 3.0.10 – diya 2012-04-24 04:52:56

0

rake db:rollback将带你一步一回头,而你的情况会删除您创建(1 => 5,2 => 10)

大小

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

或者,如果你只希望退一万步,那么你可以在self.down方法

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

执行一些自定义的SQL你也可以尝试

create_table :sizes, :options => "auto_increment = 0" do |t| 
    ... 
end 
+0

感谢您的回应!我也试过这个,但没有工作。 – diya 2012-04-24 05:30:11