Rails不会使用序列作为主键?

时间:2010-12-09 15:05:44

标签: ruby-on-rails postgresql primary-key sequence

由于某种原因,我在Rails应用程序中使用的预先存在的Postgres模式没有为表的主键设置默认序列,因此每次我想创建时都需要查询它新的一行。

我的模型中有set_sequence_name "seq_people_id",但每当我调用Person.new时,Postgres都会向我抱怨,因为Rails正在执行不带ID的插入查询(在模式中标记为NOT NULL )。

如何在创建新记录时告诉Rails始终使用序列?

  • Postgres 8.1.4
  • ActiveRecord 3.0.3
  • Rails 2.3.10

1 个答案:

答案 0 :(得分:1)

这是我运行psql和\ d foo时得到的结果:

                                 Table "public.foo"


 Column |   Type        |              Modifiers                       
--------+---------------+------------------------------------------------------
  id    | integer       | not null default nextval('foo_id_seq'::regclass)
(etc.)

我会检查以下内容:

  • 验证实际序列名称与您引用的名称相同(people_id_seq与seq_people_id)
  • 验证表的默认值与上面的内容类似
  • (只是检查)是名为“id”的主键字段?
  • 您是使用迁移还是手工创建表格?如果是后者,请尝试创建一个包含迁移的表,指定与人员表中相同的字段。它运作正常吗?比较表格。