2012-04-20 85 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