web-dev-qa-db-fra.com

Est-il possible de changer l'index de colonne dans la migration Rails 3?

J'ai une table 'utilisateurs' avec colonne 'email'. Auparavant, il était unique (avec index), mais une nouvelle exigence est d'autoriser les nils.

Existe-t-il une meilleure solution que:

  remove_index :users, :email
  add_index :users, :email

?

Initialement, il a été ajouté avec l'option unique:

add_index :users, :email, :unique => true
44
santuxus

Je dirais que vous avez la bonne solution car l'index devra être régénéré, d'où la raison pour laquelle il n'y a pas de update_index.

36
CharlesJHardy

Hé, voici une migration que je viens d'écrire et qui fonctionne plutôt bien. J'ai une table 'scraped_episodes' avec une colonne qui est varchar (255) 'enceinteUrl'. J'ai besoin de faire des URL plus longues à longues donc c'est ce que j'ai utilisé (Rails 3.2.13)

class ExpandEnclosureUrl < ActiveRecord::Migration
  def up
    # remove index cuz we need to
    remove_index :scraped_episodes, :enclosureUrl

    # change length to 2048 characters
    change_column :scraped_episodes, :enclosureUrl, :text, :limit=>2048

    # redo this index to only index the first 255 chars
    add_index :scraped_episodes, :enclosureUrl, :length => 255
  end

  def down
    # remove index cuz we need to
    remove_index :scraped_episodes, :enclosureUrl

    # use the same settings at when i first created this field
    change_column :scraped_episodes, :enclosureUrl, :string, :limit=>nil

    # use the same settings as when i first added this index
    add_index :scraped_episodes, :enclosureUrl
  end


end
12
portforwardpodcast