2010-12-09 60 views
1

Pour une raison ou pour une autre, le schéma Postgres préexistant que j'utilise avec mon application Rails n'a pas de jeu de séquences par défaut pour la clé primaire d'une table, je dois donc l'interroger chaque fois que je souhaite créer nouvelle rangée.Les rails n'utiliseront pas de séquence pour la clé primaire?

J'ai set_sequence_name "seq_people_id" dans mon modèle, mais chaque fois que j'appelle Person.new Postgres se plaint à moi parce que Rails exécute la requête d'insertion sans l'ID (qui est marqué comme NOT NULL dans le schéma).

Comment puis-je dire à Rails de toujours utiliser la séquence lors de la création de nouveaux enregistrements?

  • Postgres 8.1.4
  • ActiveRecord 3.0.3
  • Rails 2.3.10
+0

Quelle version de Rails/Postgresql utilisez-vous? Aussi, quelle gemme Ruby Postgres utilisez-vous pour vous connecter? – BryanH

+0

Postgres 8.1.4 ActiveRecord 3.0.3 Rails 2.3.10 pg 0.10.0 – magneticMonster

+1

Un peu sans rapport: mais vous devriez essayer de passer à une version PostgreStream supportée dès que possible. –

Répondre

1

Voici ce que je reçois quand je lance psql et \ d foo:

        Table "public.foo" 


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

Je vérifie ce qui suit:

  • Vérifiez le nom de la séquence réelle est la même que ce que vous faites référence (people_id_seq contre seq_people_id)
  • Vérifier la valeur par défaut de la table est similaire à ce que j'ai ci-dessus
  • (juste vérifier) ​​est le champ de la clé primaire nommée « id » ?
  • Avez-vous créé la table à l'aide d'une migration ou à la main? Si c'est le cas, essayez de créer une table avec une migration, en spécifiant les mêmes champs que dans votre table de personnes. Est-ce que ça fonctionne correctement? Comparez les tableaux.
+0

Le nom de la séquence est correct. La colonne n'a pas de valeur par défaut nextval dans le schéma. Je n'ai pas accès pour changer la base de données. – magneticMonster