[ruby-on-rails] Comment rendre une colonne unique et l'indexer dans une migration Ruby on Rails?


2 Answers

les rails génèrent la migration add_index_to_table_name nom_colonne: uniq

ou

rails génère la migration add_column_name_to_table_name nom_colonne: chaîne: 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 ajoutez un index à une colonne existante, supprimez ou commentez la ligne add_column ou insérez une vérification

add_column :moderators, :username, :string unless column_exists? :moderators, :username
Question

Je voudrais faire une colonne unique dans le script de migration Ruby on Rails. Quelle est la meilleure façon de le faire? Y a-t-il aussi un moyen d'indexer une colonne dans une table?

Je voudrais appliquer unique colonnes unique dans une base de données plutôt que d'utiliser simplement :validate_uniqueness_of .




Si vous créez une nouvelle table, vous pouvez utiliser le raccourci en ligne:

  def change
    create_table :posts do |t|
      t.string :title, null: false, index: {unique: true}
      t.timestamps
    end
  end



J'utilise Rails 5 et les réponses ci-dessus fonctionnent très bien; Voici une autre façon qui a également fonctionné pour moi (le nom de la table est :people et le nom de la colonne est :email_address )

class AddIndexToEmailAddress < ActiveRecord::Migration[5.0]
  def change
    change_table :people do |t|
      t.index :email_address, unique: true
    end
  end
end



Related