2017-07-08 16 views
1

私はテーブル - boot_campsを持っています。フィールドはpriceで、スキーマ内の小数点(8,2)です。何らかの理由で値が文字列に変換されるようです。このエラーでRails + Postgres - データベースに文字列として小数点が格納されています

validates :price, numericality: { greater_than: 0 } 

:それは、モデルで検証が失敗します ArgumentError: comparison of String with 0 failed

schema.rb:

create_table "boot_camps", force: :cascade do |t| 
    t.string "title" 
    t.decimal "price",    precision: 8, scale: 2 
    t.integer "capacity" 
    t.date  "start_date" 
    t.date  "end_date" 
end 

私はpsqlで\d boot_campsを実行する場合、私は得る:

      Table "public.boot_camps" 
    Column  |   Type    |       
Modifiers 
-------------------+-----------------------------+--------------------- 
id    | integer      | not null default 
title    | character varying   | 
price    | numeric(8,2)    | 
capacity   | integer      | 
start_date  | date      | 
end_date   | date      | 

しかし、BooCampレコードは、レールコンソールで表示されますeは、示しています

#<BootCamp:0x007fc3a8e7abd0> { 
       :id => 1, 
      :title => "test", 
      :price => "30.00", 
     :capacity => 11, 
     :start_date => nil, 
     :end_date => nil, 
} 

BootCamp.last.price.class //=> String < Object 

感謝を。

+3

この記事をチェックしてください(これはRailsでこれを克服する理由とその方法を説明しています):http://justinmccormick.com/wp/programming/ポストグラスとグレープシティー - デシマル - 文字列として現れる –

答えて

0

だから、実際には私の見落としであった。

私が救済しようとしているコードベースを継承したところ、priceをStringに変換するモデルのメソッドが見つかりました。他の人に起こる場合に備えて、ここに残しておきます...

関連する問題