50

以下是正确的吗?

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

6 回答 6

105

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

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

255 是字符串列的标准长度,rails 将消除您之前指定的限制。

更新:

虽然这适用于许多 Rails 版本,但您可能更适合nil在 Giuseppe 的回答中使用。

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

这意味着您做错的唯一一件事是使用null而不是nil.

于 2010-12-07T07:04:56.530 回答
34

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

我意识到我在表中的字符串字段不足以容纳其内容,因此我生成了一个包含以下内容的迁移:

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
于 2010-12-29T14:08:26.200 回答
3

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

change_column :tablename, :fieldname, :text, :limit => nil
于 2010-12-07T08:04:49.947 回答
0

大多数数据库不支持无限制的字符串:您必须在varchar(SIZE)定义中指定大小。
尽管您可以尝试,但我个人会选择:limit => BIG_ENOUGH_NUMBER. 您也可以考虑对非常大的文本使用 CLOB 类型。

于 2010-08-14T17:01:38.023 回答
0

要使其独立于 db-driver,应该像这样编写:

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
于 2010-08-14T21:18:12.683 回答
0

今天我也是同一条船,试图删除我添加到文本字段的限制,但它不会接受。尝试了几次迁移。

导轨 4.2.7.1 红宝石 2.3.1p112

最后,唯一有效的方法是指定 255 的限制。尝试适应其他任何东西对我来说都行不通。

于 2017-03-31T16:24:23.427 回答