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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

Q&A

1回答

436閲覧

[Rails] Railsコンソール(pry)とbinding.pryで取得した値が異なる。

dounatsu

総合スコア78

Ruby on Rails

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

0グッド

1クリップ

投稿2018/12/25 19:46

コンソールで取得した値とpryのデバッグで取得した値が異なるのですが、理由が分からないため質問させて頂きます。

現在下記の様なコードで予約を取得しています。
binding.pryで処理を止めて変数の中身を確認すると中身が入っているのですが、コンソールで確認すると中身が空で出力されます。コードをコピペしただけなので、同じ処理をしていると思うのですが、それぞれ違う結果が出ることはあり得るのでしょうか。

ruby

1date = Date.new(2018,1,1) 2@bookings = Booking.where("start_time >= ? AND start_time < ?", date, date + 1) 3 4#期待される出力は以下(binding.pryで変数を確認した時の出力) 5 @bookings 6=> [#<Booking:0x00007fe0970df500 7 id: 1, 8 room: 3, 9 start_time: Tue, 01 Jan 2019 15:30:00 UTC +00:00, 10 end_time: Tue, 01 Jan 2019 17:30:00 UTC +00:00, 11 created_at: Sun, 23 Dec 2018 11:34:22 UTC +00:00, 12 updated_at: Sun, 23 Dec 2018 11:34:22 UTC +00:00>] 13 14#コンソールで出力される結果 15=> []

コンソールで出力されているSQLは以下になります。

sql

1 SELECT "bookings".* FROM "bookings" WHERE (start_time >= '2018- 201-01' AND start_time < '2018-01-02')

以上よろしくお願いします。

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

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

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

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

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

guest

回答1

0

... コンソールで確認すると ...

具体的にどのよう操作して [] の出力を得たのかを明示してください。

$ rails c でコンソールを起動し、
date = Date.new(2018,1,1)
Booking.where("start_time >= ? AND start_time < ?", date, date + 1)
としたら、 [] が表示されたのでしょうか?

質問とは直接関係ないですが、日付・時刻の範囲検索はつぎのような書き方もあります。

where(“updated_at BETWEEN ? AND ?”, from, to)
where(updated_at: Time.zone.today.beginning_of_day..Time.zone.today.end_of_day)

参考

  • ActiveRecordで日付・時刻の範囲検索をシンプルに書く方法

https://techracho.bpsinc.jp/hachi8833/2016_08_19/24876

投稿2018/12/25 22:09

katoy

総合スコア22324

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

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

dounatsu

2018/12/25 23:58

コメントありがとうございます。 仰る通りの方法で値を取得しました。
dounatsu

2018/12/26 00:02

追記ですが、where(updated_at: Time.zone.today.beginning_of_day..Time.zone.today.end_of_day)で値を取得すると上手くいきます。Booking.where("start_time >= ? AND start_time < ?", date, date + 1)で値を取得しようとするとコンソールでは上手くいきません。ただ、Development環境で実際のコードを動かすと値が取得できてるので、不思議に思い質問させて頂きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問