2010-10-13 3 views
1
ruby 1.9.2 
rails 3.0.0 
ruby-oci 2.0.4 
activerecord-oracle_enhanced-adapter 1.3.1 

par exemple la table des utilisateurs nommé (id: nombre (38,0), nom)peut être sauvé, mais id est nul dans rails3 avec adaptateur amélioré oracle-

user = User.new 
user.name ='test' 
user.save! # is successful 
user.id # got nil 
user.name # got 'test' 

et dans le base de données j'ai une séquence nommée "USERS_SEQ" et a bien fonctionné (nextval ou currentval est à droite)

Quel est le problème?

Répondre

0

Peut-être que votre table n'a pas de contrainte de clé primaire et par conséquent la colonne de clé primaire n'est pas identifiée par l'adaptateur oracle_enhanced?

Voir la discussion à http://groups.google.com/group/oracle-enhanced/browse_thread/thread/3cf18b86333752c5

+0

En tant que solution de contournement pour les vues, les vues matérialisées - ajoutez une contrainte PK (oui c'est possible). 'ALTER MATERIALIZED VIEW XYZ AJOUTER CONTRAINT PK_X PRIMARY KEY (quelque chose) DISABLE NOVALIDATE' – tamersalama

0

Vous devrez attribuer explicitement le users_seq.nextval à user.id. Ce n'est pas fait automatiquement comme dans SQL Server. Il n'existe pas de colonne d'incrémentation automatique dans Oracle.

+0

non, dans des rails, réellement automatique. – qichunren

+0

Il va automatiquement exécuter users_seq.nextval et générer le droit insérer sql – qichunren

+0

apparemment pas. Peut-être devriez-vous nous donner plus d'informations. Comme la définition de classe. Vous devez appliquer le nom de la table, le pk et la séquence dans la définition du modèle. –

Questions connexes