Railsで以下のようなテーブルを作成しました。
create_table "plans", charset: "utf8mb4", force: :cascade do |t| t.string "name", null: false t.integer "price", null: false t.date "available_from", null: false t.date "available_to", null: false t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end
この時以下のようにモデルをnewできると思います。
# 正しい値 [45] pry(main)> Plan.new({name: "test", price: 500, available_from: "2020-01-01", available_to: "2020-01-02"}) => #<Plan:0x00007ff7bd2555a0 id: nil, name: "test", price: 500, available_from: Wed, 01 Jan 2020, available_to: Thu, 02 Jan 2020, created_at: nil, updated_at: nil>
以下のように各カラムに型が違う値を渡す時の挙動に関して質問です。
[46] pry(main)> Plan.new({name: "test", price: "hoge", available_from: "2020-01-01", available_to: "hoge"}) => #<Plan:0x00007ff7bc64db68 id: nil, name: "test", price: 0, available_from: Wed, 01 Jan 2020, available_to: nil, created_at: nil, updated_at: nil>
hogeにintegerではなくstring, available_fromにdateではなく、stringをわたしています。
お聞きしたいのは、どういうロジックで priceに0やavailable_fromにnilが入るかです。
priceに関しては、以下より0になるのかなと予想できますが、
[49] pry(main)> "hoge".to_i => 0
available_fromに関しては、parseするとエラーをはくため、なぜにnilになるかわかりません。
[50] pry(main)> Date.parse("hoge") Date::Error: invalid date from (pry):64:in `parse'
application recordないでインスタンスをnewする時の挙動が関係していると思うのですが、どこを調べればよいでしょうか。
version情報
- Rails 6.1.1
- ruby 2.7.0
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/22 06:29