2010-08-14 64 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極限努力適應別的也不會爲我工作的事情。