503 votes

comment faire de colonne unique et de les indexer dans les Rails de la Migration

Je voudrais faire une colonne unique dans les Rails script de migration. Quelle est la meilleure façon de le faire? Aussi est-il un moyen d'indexer une colonne dans un tableau?

Je voudrais appliquer des colonnes uniques dans la base de données plutôt que de simplement en utilisant :validate_uniqueness_of

Merci,

Tam

808voto

ndp Points 8959

La réponse courte:

add_index :table_name, :column_name, :unique => true

À l'index sur plusieurs colonnes ensemble, vous passez un tableau de noms de colonnes au lieu d'une seule colonne nom,

add_index :table_name, [:column_name_a, :column_name_b]

Pour un contrôle précis, il y a un "execute" méthode qui s'exécute directement SQL.

Ça y est!

Si vous faites cela comme un remplacement régulier ancien modèle de validation, il suffit de vérifier pour voir comment il fonctionne. Je ne suis pas sûr que le rapport d'erreur à l'utilisateur sera aussi beau. Vous pouvez toujours faire les deux.

164voto

d.danailov Points 943

rails generate migration add_index_to_table_name column_name:uniq

ou

rails generate migration add_column_name_to_table_name column_name:string:uniq:index

génère

class AddIndexToModerators < ActiveRecord::Migration
  def change
    add_column :moderators, :username, :string
    add_index :moderators, :username, unique: true
  end
end

Si vous êtes l'ajout d'un index d'une colonne existante, supprimer ou commenter l' add_column ligne de.

-9voto

Oleksii Points 13

Pour résoudre le problème de l'ajout d'index unique après la création de la table, vous pouvez utiliser 1) râteau:db migrer VERSION=0 2) râteau:db migrer au lieu de rake db:le programme d'installation

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