Rails не будет использовать последовательность для первичного ключа? - PullRequest
1 голос
/ 09 декабря 2010

По той или иной причине в уже существующей схеме Postgres, которую я использую с моим приложением Rails, не задана последовательность по умолчанию для первичного ключа таблицы, поэтому я должен запрашивать ее каждый раз, когда хочу создать новый ряд.

В моей модели set_sequence_name "seq_people_id", но всякий раз, когда я звоню Person.new, Postgres жалуется мне, потому что Rails выполняет запрос вставки без идентификатора (который отмечен как NOT NULL в схеме).

Как мне сказать Rails всегда использовать последовательность при создании новых записей?

  • Postgres 8.1.4
  • ActiveRecord 3.0.3
  • Рельсы 2.3.10

1 Ответ

1 голос
/ 10 декабря 2010

Вот что я получаю, когда запускаю 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"?
  • Вы создали таблицу с помощью миграции или вручную? Если последнее, попробуйте создать таблицу с миграцией, указав те же поля, что и в вашей таблице сотрудников. Это работает правильно? Сравните таблицы.
...