2013-03-03 79 views
0

在Rails,我的會員制模式的遷移是這樣的:Postgres的表沒有設置自動增量的主鍵

class CreateMemberships < ActiveRecord::Migration 
    def change 
    create_table :memberships do |t| 
     t.integer :user_id 
     t.integer :organization_id 
     t.integer :membership_type_id 

     t.timestamps 
    end 
    end 
end 

和我的用戶模型遷移:

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     t.string :first_name 
     t.string :last_name 
     t.string :email 

     t.timestamps 
    end 
    end 
end 

對我來說,這些看起來很漂亮幾乎相同。但是,當我看着表中psql我看到這一點:

cd_dev=# \d memberships 
        Table "public.memberships" 
     Column  |   Type    | Modifiers 
--------------------+-----------------------------+----------- 
id     | integer      | not null 

cd_dev=# \d users 
             Table "public.users" 
    Column  |   Type    |      Modifiers      
---------------+-----------------------------+---------------------------------------------------- 
id   | integer      | not null default nextval('users_id_seq'::regclass) 

換句話說,memberships表的id字段不會自動被分配。在Rails控制檯,當我嘗試通過簡單地做Membership.create(user_id: 1, organization_id: 1)創建一個新的成員失敗說:

ActiveRecord::StatementInvalid: PG::Error: ERROR: null value in column "id" violates not-null constraint

我大概可以谷歌的方式來正確地做出membershipsid領域的工作,但我不要」不明白是怎麼發生的。有什麼我應該知道Rails/Postgres?我不記得是否使用了Rails生成器或手動輸入了每個模型的遷移。

回答

1

這是不正常的。你確定你沒有手動擺弄數據庫嗎?嘗試

rake db:drop db:create db:migrate 
+0

我很高興聽到這是不正常的。我在heroku的開發和生產數據庫中存在這個問題。很久以前,我在一個地方手工操作數據庫,但我99%肯定我的擺弄在一張完全不同的桌子上。我會嘗試在dev中創建一個新的數據庫並運行遷移。 PS,我不知道你可以鏈耙這樣的命令? – mehulkar 2013-03-03 17:52:45

+0

是的,你可以,這是一個很好的訣竅 - 你不必等待耙子每次加載rails環境,它會一次完成所有3個操作。 – mrbrdo 2013-03-03 18:33:41