2010-08-14 63 views

回答

90

,并希望只是删除了极限,你可以这样做:

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

255是一个字符串列的标准长度,并且rails会消除您先前指定的限制。

更新时间:

虽然这部作品在一些Rails的版本,你很可能会更适合在朱塞佩的答案使用nil等。

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

这意味着你在做错误的唯一的事情是使用null代替nil

0

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

0

为了让DB-驾驶员无关的人应该写水木清华这样的:如果此前指定了在迁移的限制

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 
3

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

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

这是不正确的...如果你只是简单地将字符串从字符串转换为文本,rake db:migrate将会保留这个限制,当你尝试使用heroku rake时,会遇到一些问题:schema:load – jpwynn 2011-02-02 22:40:09

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 
+0

对我来说我需要rake db:migrate:reset要真正改变限制,并且应该小心那个命令,导致它丢弃数据库。 – p1100i 2012-11-08 17:07:28

0

我是同一条船上的今天,试图消除限制我于是我如下“重做”迁移'd添加到文本字段,它不会采取。尝试了几次迁移。

Rails的4.2.7.1 红宝石2.3.1p112

最终,只有工作在指定的255极限努力适应别的也不会为我工作的事情。