在rails迁移中,如何删除字段的限制

时间:2010-08-14 16:51:41

标签: ruby-on-rails ruby rails-migrations

以下是否正确?

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

6 个答案:

答案 0 :(得分:95)

如果您之前在迁移中指定了限制,并希望仅删除限制,则可以执行以下操作:

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

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

更新:

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

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

这意味着你唯一错误的就是使用null代替nil

答案 1 :(得分: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

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

没有限制的字符串不是大多数数据库支持的字符串:您必须在varchar(SIZE)定义中指定大小 虽然你可以尝试,但我会亲自去:limit => BIG_ENOUGH_NUMBER。您也可以考虑将CLOB类型用于非常大的文本。

答案 4 :(得分:0)

要使其与db-driver无关,应该像这样编写smth:

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

答案 5 :(得分:0)

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

Rails 4.2.7.1 Ruby 2.3.1p112

最后,唯一有用的是指定限制为255.尝试调整其他任何东西都不适用于我。