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
我大概可以谷歌的方式來正確地做出memberships
的id
領域的工作,但我不要」不明白是怎麼發生的。有什麼我應該知道Rails/Postgres?我不記得是否使用了Rails生成器或手動輸入了每個模型的遷移。
我很高興聽到這是不正常的。我在heroku的開發和生產數據庫中存在這個問題。很久以前,我在一個地方手工操作數據庫,但我99%肯定我的擺弄在一張完全不同的桌子上。我會嘗試在dev中創建一個新的數據庫並運行遷移。 PS,我不知道你可以鏈耙這樣的命令? – mehulkar 2013-03-03 17:52:45
是的,你可以,這是一個很好的訣竅 - 你不必等待耙子每次加載rails環境,它會一次完成所有3個操作。 – mrbrdo 2013-03-03 18:33:41