在 Rails 中,My Membership 模型迁移如下所示:
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
我可能可以用谷歌搜索一种使该id
领域正常工作的方法memberships
,但我不明白这是怎么发生的。关于 Rails/Postgres 有什么我应该知道的吗?我不记得我是使用 Rails 生成器还是手动输入这些模型的迁移。