In a rails migration, how can you remove the limit of a field
Is the following correct?
开发者_Go百科 change_column :tablename, :fieldname, :limit => null
If you previously specified a limit in a migration and want to just remove the limit, you can just do this:
change_column :users, :column, :string, :limit => 255
255 is the standard length for a string column, and rails will just wipe out the limit that you previously specified.
Updated:
While this works in a number of Rails versions, you would probably be better suited to use nil
like in Giuseppe's answer.
change_column :users, :column, :string, :limit => nil
That means the only thing you were doing wrong was using null
instead of nil
.
Here's what happened to me.
I realized that a string field I had in a table was not sufficient to hold its content, so I generated a migration that contained:
def self.up
change_column :articles, :author_list, :text
end
After running the migration, however, the schema had:
create_table "articles", :force => true do |t|
t.string "title"
t.text "author_list", :limit => 255
end
Which was not OK. So then I "redid" the migration as follows:
def self.up
# careful, it's "nil", not "null"
change_column :articles, :author_list, :text, :limit => nil
end
This time, the limit was gone in schema.rb:
create_table "articles", :force => true do |t|
t.string "title"
t.text "author_list"
end
Change the column type to :text
. It does not have a limit.
change_column :tablename, :fieldname, :text, :limit => nil
Strings without limit is not something most databases support: you have to specify size in varchar(SIZE)
definition.
Although you could try, I would personally go with :limit => BIG_ENOUGH_NUMBER
. You may also consider using CLOB type for very big texts.
To make it db-driver-independent one should write smth like this:
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
I was the same boat today, trying to remove a limit I'd added to a text field and it wouldn't take. Tried several migrations.
Rails 4.2.7.1 Ruby 2.3.1p112
In the end, the only thing that worked was specifying a limit of 255. Trying to adjust to anything else wouldn't work for me.
精彩评论