僕は発展途上技術者

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 より)


プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Raspberry Piではじめる どきどきプログラミングを書きました。

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Twitter @jishiha

最近のエントリー

アーカイブ