2010-02-02 5 views

Répondre

7

Vous devez exécuter une instruction SQL.

statement = "ALTER TABLE `users` CHANGE `id` `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT" 
ActiveRecord::Base.connection.execute(statement) 

Notez que ceci n'est qu'un exemple. La syntaxe finale de l'instruction SQL dépend de la base de données.

+0

merci beaucoup @Simone Carletti, gaspillés journée entière pour résoudre le problème, mais maintenant il est résolu et grâce DGM aussi, pour postin g question spécifique à mon cas. Pouvez-vous me donner une idée sur l'écriture des procédures stockées dans les rails 4.1 d'une manière élégante, en espérant que vous m'aiderez à nouveau. Codage heureux. – roarfromror

+0

Je ne connais pas beaucoup d'activité dans les rails en utilisant des procédures stockées - certains coins des rails ont peu d'utilité pour les côtés les plus puissants de SQL, d'autres ne le savent pas ... de toute façon, à tout le moins, vous pouvez utiliser cette même forme pour écrire le SQL pour créer la procédure stockée. – DGM

6

Si vous êtes sur postgesql, une seule requête ne le fera pas. Vous devrez créer une nouvelle séquence dans la base de données.

create sequence users_id_seq; 

Ensuite, ajoutez la colonne id à votre table

alter table users 
    add id INT UNIQUE; 

Réglez ensuite la valeur par défaut pour l'ID

alter table users 
    alter column id 
     set default nextval('users_id_seq'); 

remplir ensuite la colonne id. Cela peut être assez long si la table a plusieurs lignes

update users 
    set id = nextval('users_id_seq'); 

Hope this helps utilisateurs ... postgresql

+0

Merci! C'est très utile! –

Questions connexes