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