Railsマイグレーションでdecimal型の精度(桁数)を指定

スポンサーリンク

Rails のマイグレーションで、カラムに decimal 型を桁数(精度)とともに指定する方法です。Rails プロジェクトで、地図を用いた機能で緯度・経度の座標を扱う機会があったのですが、座標データということで整数部3桁・小数点以下8桁(合計11桁)の小数の数値データをカラムに格納したかった。

Railsで座標を扱うときに嵌ったのでメモ – @Konboi memo
マイグレーション(migration) – – Railsドキュメント

上記ページあたりを参考にしました。

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

— 環境 —
rails 4.1.6
activerecord 4.1.6

decimal 型指定では precision, scale のオプションを指定可

migration で decimal のデータ型を指定する場合、「precision – 全体の桁数(精度)」と「scale – 小数点以下の桁数」のオプションを指定できる。以下の例では、geocodes テーブルとそのカラム latitude, longitude などを作成しています。

latitude(緯度)、longitude(経度)のカラムに decimal 型を指定して、全体の精度(桁数)が 11(precision)、小数点以下の桁数が 8(scale)となるように指定しました。

BigDecimal オブジェクトが返されることへの対応

冒頭のリンク先にも書いてありますけど、decimal 型を指定してマイグレーションを行った場合、モデルの属性へのアクセスで BigDecimal のオブジェクトが返ってきます。上記マイグレーションの例ですと、Geocode#latitude, Geocode#longitude が BigDecimal のオブジェクトを返す。

なので、モデルに reader 用のメソッドを作成しておくと便利かと思います。Ruby の Float オブジェクトの数値としての表示や引数の値として渡す場合などは、これを使うようにすると便利かと。

以上です。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!