在导轨迁移中,你怎样去除一个字段的限制

以下是否正确?

change_column :tablename, :fieldname, :limit => null 

如果您之前在迁移中指定了限制,并且想要删除限制,则可以这样做:

 change_column :users, :column, :string, :limit => 255 

255是一个string列的标准长度,并且rails将只消除先前指定的限制。

更新:

虽然这可以在许多Rails版本中使用,但是您可能更适合使用像Giuseppe的答案中的nil

 change_column :users, :column, :string, :limit => nil 

这意味着你做错了唯一的事情是使用null而不是nil

这是发生在我身上的事情。

我意识到我在表中的string字段不足以保存它的内容,所以我产生了一个迁移,其中包含:

 def self.up change_column :articles, :author_list, :text end 

运行迁移后,该模式具有:

 create_table "articles", :force => true do |t| t.string "title" t.text "author_list", :limit => 255 end 

哪个不好 。 那么我“重新”移植如下:

 def self.up # careful, it's "nil", not "null" change_column :articles, :author_list, :text, :limit => nil end 

这一次,schema.rb中的限制消失了:

 create_table "articles", :force => true do |t| t.string "title" t.text "author_list" end 

将列types更改为:text 。 它没有限制。

 change_column :tablename, :fieldname, :text, :limit => nil 

无限制的string不是大多数数据库支持的东西:必须在varchar(SIZE)定义中指定大小。
虽然你可以尝试,我个人会去:limit => BIG_ENOUGH_NUMBER 。 你也可以考虑使用非常大的文本CLOBtypes。

为了使它独立于数据库驱动程序,应该这样写:

 add_column :tablename, :fieldname_tmp, :text Tablename.reset_column_information Tablename.update_all("fieldname_tmp = fieldname") remove_column :tablename, :fieldname rename_column :tablename, :fieldname_tmp, :fieldname 

我今天是同样的船,试图消除我已经添加到文本字段的限制,它不会采取。 尝试了几次迁移。

Rails 4.2.7.1 Ruby 2.3.1p112

最后,唯一有效的工作是指定一个255的限制。试图调整到其他任何东西都不适合我。