Comportement étrange add_column

Bonjour à tous.

Je viens vers vous avec une question qui découle d’un constat. Après
quelques années de PHP, et plusieurs tentatives pas forcément
concluentes de
mapping objet/relationnel “maison”, c’est tout naturellement que je me
suis
tourné vers Rails après avoir englouti un ouvrage et quelques tutoriels
sur
le sujet.

Comme la théorie ne suffit pas, je me suis lancé dans un projet complet
basé
sur Ruby on Rails, et jusqu’ici tout va bien. Ou presque. Hier j’ai buté
sur
un petit soucis. Suite à un oubli des plus fâcheux, j’avais oublié de
créer
une de mes clefs étrangères dans ma base… J’utilise donc le système de
migration de rails afin de mettre à jour ma table de la meilleure façon
qui
soit, et après un rake db:migrate, stupeur, un message d’erreur des plus
particuliers en provenance d’une des classes du framework me disait que
j’ai
essayé de faire appel à nil.[].

Après quelques temps de recherche, et quelques relectures, je suis
arrivé au
constat suivant:
create_table “matable” do |t|
t.column :monchamp, :integer
end

Me créée bien sûr une table avec un champ qui est un entier. La
procédure
suivante, contenant une erreur de ma part, lui est pourtant équivalente:
create_table “matable” do |t|
t.column :monchamp, :int
end

Si je veux rajouter un autre entier:
add_column :matable, :monchamp2, :integer

Marche très bien, mais:
add_column :matable, :monchamp2, :int

Cause l’erreur évoquée ci dessus. Ce phénomène est il connu, expliqué ?
Désolé pour la question de débutant, simplement, j’essaye de comprendre
un
peu mon nouvel environnement :wink:

La bonne syntaxe c’est :integer

Le 06/04/07, Nightou [email protected] a écrit :

Je me suis rendu compte de mon erreur après coup, mais en fait ma
remarque
allait plutôt pour faire remarquer que :int fonctionne très bien dans le
bloc d’un create_table, mais provoque une erreur plus qu’obscure comme
paramètre d’un add_column.

C’était donc plus par curiosité si quelqu’un avait déjà constaté le
problème
et éviter que d’autres ne se demandent ce qui se passe au cas où ça se
produirait chez eux…

ta remarque est très bonne, pas de souci ! je suis tombé sur la même
‘inconsistence’ au début; c’est effectivement troublant car le
comportement
n’est pas homogène. A l’époque j’avais été voir ce qui se passait plus
bas,
et de mémoire le ‘int’ trouvait sa route dans un cas mais pas dans
l’autre.

tu peux te référer à la liste des types ici (:int n’y apparait pas):

http://api.rubyonrails.com/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#M000762

a+

Thibaut Barrère