web-dev-qa-db-ja.com

Rails 3移行で列インデックスを変更することは可能ですか?

「メール」列のある「ユーザー」テーブルがあります。以前は(インデックス付きで)一意でしたが、新しい要件はそこにnilを許可することです。

より良い解決策はありますか:

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

最初は、一意のオプションで追加されました。

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

インデックスを再生成する必要があるので、そこに正しい解決策があると思います。したがって、なぜ_update_index_がありません。

36
CharlesJHardy

ちょっとここに書いた移行はかなりうまくいきます。 varchar(255) 'enclosureUrl'の列を持つテーブル 'scraped_episodes'があります。これを長いURLに長くする必要があるので、これが私が使用したものです(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