2007.05.10
Rails の migration ファイルで decimal 型のカラムを作成する
メモ代わりのエントリー。
Google Maps 上にデータをプロットしたくて、緯度と経度を DB に保存したいのだが、Rails の migration ファイルで
def self.up
create_table :tests, :force => true do |t|
t.column :lat, :float
t.column :lng, :float
end
end
として、float 型の lat と lng カラムを用意した場合、誤差が生じて、実際にプロットしたい場所とずれて表示されてしまう。
解決方法はというと、Rails のバージョンが 1.2.2 以上ならば、:decimal 型がサポートされているとのことなので、
t.column(:price, :decimal, :precision => 17, :scale => 14,
:default => 0.0, :null => false)
のように指定できる。
(depot/iterate/TaskA_Product_Maintenance - Study Ruby On Rails - Trac より)
rails 1.2.2 を使用できない場合は、
def self.up
create_table :tests, :force => true do |t|
end
execute "ALTER TABLE pages ADD COLUMN lat DECIMAL(17,14)"
execute "ALTER TABLE pages ADD COLUMN lng DECIMAL(17,14) AFTER `lat`"
end
のように execute 文で直接 SQL 文を流せばよい。
(UsingMigrations in Ruby on Rails より)
2007/05/10 15:53:39