In a rails migration, how can you remove the limit of a field

Ruby on-RailsRubyRails Migrations

Ruby on-Rails Problem Overview


Is the following correct?

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

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

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.

Solution 2 - Ruby on-Rails

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

Solution 3 - Ruby on-Rails

Change the column type to :text. It does not have a limit.

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

Solution 4 - Ruby on-Rails

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.

Solution 5 - Ruby on-Rails

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

Solution 6 - Ruby on-Rails

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkidbraxView Question on Stackoverflow
Solution 1 - Ruby on-RailsJeremy BakerView Answer on Stackoverflow
Solution 2 - Ruby on-RailsGiuseppeView Answer on Stackoverflow
Solution 3 - Ruby on-RailsedgerunnerView Answer on Stackoverflow
Solution 4 - Ruby on-RailsNikita RybakView Answer on Stackoverflow
Solution 5 - Ruby on-Railsuser420577View Answer on Stackoverflow
Solution 6 - Ruby on-RailsGiantCoderView Answer on Stackoverflow