Posted in rails at 15:53:39 by ジュンヤ

メモ代わりのエントリー。

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

railsカテゴリの最近の記事             

コメント・トラックバック

この記事のトラックバックURL

コメントを残す