2013-03-08 70 views
1

我應該怎樣:id列更改下面的代碼使用的主鍵,用auto_increment:limit => 8Rails的遷移,更改:id列型

def change 
    create_table :companies, :id => false do |t| 
    t.integer :id, :limit => 8 
    t.string :name 

    t.timestamps 
    end 
end 

此代碼不作出:id列作爲主鍵和不爲自動增量創建序列。

的PostgreSQL 8.4,Rails的3.2.11

+0

在這種情況下,「限制」是什麼? – 2013-03-08 21:07:55

+0

我需要:id列作爲bigint。 (:limit => 8) – ole 2013-03-08 21:11:21

回答

1

更改列的長度或數據類型的遷移將列無效作爲主鍵。相反,創建覆蓋站點的默認主鍵數據類型應該提供的行爲的初始化你希望實現:

# config/initializers/change_primary_key_datatype.rb 
require 'active_record/connection_adapters/postgresql_adapter' 
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:primary_key] = "bigserial primary key" 

記住保存初始化後重新啓動服務器。

+0

它的工作原理,但問題是:我只需要一個表的bigint作爲主鍵。 – ole 2013-03-09 11:24:20

+1

啊。但是,我的回答解決了您的原始問題,該問題未指定更改是否適用於每個表格或單個表格。因此,如果此答案已起作用,如果您通過單擊複選標記將其標記爲已接受,則對其他讀者會有所幫助。 – zeantsoi 2013-03-09 21:49:56

+0

要跟蹤您的具體情況:我不認爲有可能讓Rails按照您描述的方式行事。 Rails中的主鍵可以在每個適配器的應用程序範圍內進行設置,但是在遷移中對主鍵數據類型的任何修改都必然會否定該列充當主鍵。 – zeantsoi 2013-03-09 22:00:10