2011-06-19 5 views
4

Rails 3の移行ファイルでfloatカラムのdecimalslength属性を変更するにはどうすればよいでしょうか。Rails 3 Migration Alter Float Length/Decimal

class IncreaseLatitudeLongitudeFieldLengths < ActiveRecord::Migration 
    def self.up 

    change_column :skateparks, :latitude, :float, {:length => 15, :decimals => 12} 
    change_column :skateparks, :longitude, :float, {:length => 15, :decimals => 12} 

    end 

    def self.down 

    change_column :skateparks, :latitude, :float, {:length => 0, :decimals => 0} 
    change_column :skateparks, :longitude, :float, {:length => 0, :decimals => 0} 

    end 
end 

答えて

8

個人の経験(のMySQL/SQLiteのは、時には列への変更を拒否したので)何が最も適しています:ノー成功/ wの次を試してみました、名前の変更、古い列を削除し、データをコピーし、新しい列を作成します。新しい列。

# Example for latitude 

add_column :skateparks, :latitude2, :decimal, :precision => 15, :scale => 12 
execute "UPDATE skateparks SET latitude2 = latitude" 
remove_column :skateparks, :latitude 
rename_column :skateparks, :latitude2, :latitude 

編集:第2の表記:float, { :length => 15, :decimals => 12 }は間違っているようです。あなたが意味すると思います::decimal, :precision => 15, :scale => 12

+0

私はこれを試しましたが、新しく作成された列は:lengthまたは:decimalsオプションを受け入れていないようです。私は長さ= 0、小数= 0の浮動小数点数で終わる –

+0

答えを更新しました。私は浮動小数点/小数とそれぞれの設定を混乱させたと思う。詳細はこちら[http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-column]をご覧ください。 –

+0

あなたは正しいです。私は10進数を使っていたはずです。私は自分のコードを更新しました。ありがとう! –