2 votes

La migration ActiveRecord :unique => true est ignorée ?

Je crée une table et je spécifie :

t.integer   :random_id, :unique => true

Il n'ajoute pas d'index unique à random_id. Mais si je le fais :

ActiveRecord::Migration.add_index :test, :random_id, :unique => true

Ensuite, cela fonctionne. Quel est le problème avec la première méthode ? Merci beaucoup.

4voto

dorianm Points 243
Je pense que vous l'avez expliqué vous-même dans vos deux exemples.
t.integer est une définition de colonne, tandis que add_index ajoute un index.
unique est une option d'index et les index sont définis séparément des colonnes : http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

Cela vous permet de définir non seulement des colonnes uniques, mais aussi des combinaisons de colonnes. C'est particulièrement utile si vous ne voulez des valeurs uniques que dans un certain cadre, par exemple pour ordonner le contenu dans les sections :

add_index(:post_position_within_section, [:position, :sections_id], :unique => true)

Légèrement modifié à partir d'ici : http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X