Posted at

Rails g modelの際のdecimal型のフィールドについての注意点

More than 3 years have passed since last update.

例えば10進数で最大桁数10桁、小数点以下2桁のpriceフィールドを持ったモデルを作成するとする。

このときシングルクォーツで囲ってやらないとヤヴァイ。

rails g model product 'price:decimal{10,2}'

理由は以下に書いてあるのですが、

https://github.com/rails/rails/pull/12642

要は囲わないとマイグレーションファイルがこのようになっちゃう。

class CreateProducts < ActiveRecord::Migration

def change
create_table :products do |t|
t.decimal10 :price
t.decimal2 :price

t.timestamps
end
end
end

decimal10型とdecimal2型のpriceができちゃう。

bash上でこうやってチェックしてみるとわかりやすい。

$ echo p{1,2}

p1 p2

なのでシングルクォーツで囲って

class CreateProducts < ActiveRecord::Migration

def change
create_table :products do |t|
t.decimal :price, precision: 10, scale: 2

t.timestamps
end
end
end

このように生成するということです。

その他参考記事:


http://guides.rubyonrails.org/active_record_migrations.html#passing-modifiers