Rails: Cannot add :precision or :scale options with change_column in a migration?

14,476

Solution 1

Does Not Work for SQLite3

For this simple test app that I'm running I have SQLite3 setup. Apparently, SQLite3 doesn't rely on column type declarations and is more dynamic, looking at the column's content instead - as was stumbled upon here:

Modify a Column's Type in sqlite3

I haven't tested it but I'm sure that's why the schema wasn't being changed, because change_column doesn't translate to anything in SQLite3.

Thanks for the replies guys.

Solution 2

Had a related (but not same) problem. I was just changing scale, so when changing the :scale you need the full line:

change_column :something, :weight, :decimal, :precision => 10, :scale => 2

omitting :decimal (which it already was) and :precision (which already was 10) will cause the migration to fail.

Solution 3

Delete and regenerate db\schema.rb file.

rake db:schema:dump
Share:
14,476
Joshua Pinter
Author by

Joshua Pinter

Updated on June 05, 2022

Comments

  • Joshua Pinter
    Joshua Pinter almost 2 years

    This seems to have been asked before: rails decimal precision and scale

    But when running a change_column migration for :precision or :scale they don't actually affect the schema or database, but db:migrate runs without errors.

    My migration file looks like this:

    class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
      def self.up
        change_column :tags, :payback_period, :decimal, { :scale => 3, :precision => 10 }
      end
    
      def self.down
        change_column :tags, :payback_period, :decimal
      end
    end
    

    But my schema (and the data) remains as:

    t.decimal  "payback_period"
    

    Anybody else have this issue?

    Thanks,

    Josh