Rails 3 迁移

4

当前迁移:

t.string   "email", :default => "", :null => false
add_index :users, :email, :unique => true

我希望创建一个新的迁移,以删除:null => false的要求,并删除emaildefault => ""。同时,我想更改索引以删除:unique => true。语法是什么?


你已经执行了这个迁移吗?如果没有,你可以编辑它以删除你不想要的字段。 - providence
迁移已经完成。 - Johnny Klassy
1个回答

6

我对索引并没有做过多的工作,在ActiveRecord::Migration上似乎也没有change_index方法,但您可以尝试如下操作:

class ChangeUserStuff < ActiveRecord::Migration
  def self.up
    change_column :users, :email, :default => "", :null => true
    remove_index :users, :column => :email
    add_index :users, :email
  end

  def self.down
    change_column :users, :email, :default => "", :null => false
    remove_index :users, :column => :email
    add_index :users, :email, :unique => true
  end
end

在更改:null选项方面存在一些有趣的行为,但我认为将它们设置为true而不是省略应该可以处理它。


2
“可用的转换”部分在此处提供了完整的语法,用于删除索引。[http://api.rubyonrails.org/classes/ActiveRecord/Migration.html] - providence
谢谢,我更新了我的答案以使用正确的:column => :column_name语法。 - Adam Eberlin
1
顺便提一下,remove_index :users, :column => :email 应该改为 remove_index :users, :email - Johnny Klassy
根据文档:remove_index(table_name, :column => column_name):删除指定列column_name的索引。这个描述有误吗?再次声明,我以前从未使用过add/remove_index。 - Adam Eberlin
不知道,那可能是针对旧版本的Rails,对于3.x版本,就是我说的。 - Johnny Klassy
1
在你的例子中,change_column 还需要列类型。change_column :users, :email, :string, default: "", null: true - mindtonic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接