Rails: Cannot add :precision or :scale options with change_column in a migration?
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
Joshua Pinter
Updated on June 05, 2022Comments
-
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, butdb: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