Postgres表没有在主键上设置自动增量

时间:2013-03-03 09:22:30

标签: ruby-on-rails-3 postgresql activerecord

在Rails中,我的成员资格模型迁移如下所示:

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我应该知道些什么吗?我不记得我是否使用了轨道生成器或手动输入了每个模型的迁移。

1 个答案:

答案 0 :(得分:1)

这不正常。你确定你没有手动操作数据库吗?尝试

rake db:drop db:create db:migrate