質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
date

dateは、date型や日付に関する関数や処理についてのタグです

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

3091閲覧

RailsのActiveRecordのdate型カラムに文字列を渡すとnilになるのはどうしてでしょうか

Take_st

総合スコア7

date

dateは、date型や日付に関する関数や処理についてのタグです

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2021/02/20 04:40

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

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず探すべきなのは、その挙動について書かれたドキュメントです。

明文に書かれていない動作は、バージョンやDBの組み合わせによっても変化しうるものであって、当該動作に頼ったコードを書くべきではないものです。当然、掘り下げて調べる値打ちもありません。

投稿2021/02/20 05:07

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Take_st

2021/02/22 06:29

回答ありがとうございます。 まずはドキュメントをあたるのを心がけます。 > 明文に書かれていない動作は、バージョンやDBの組み合わせによっても変化しうるものであって、当該動作に頼ったコードを書くべきではないものです。当然、掘り下げて調べる値打ちもありません。 この考え方があまりなかったため、非常に勉強になりました。 たしかに調べて実装がわかっても、そうなんだで終わってしまいますね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問