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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

2回答

478閲覧

[Rails] 日時の範囲内であるはずのレコードを取得できない

s_diff

総合スコア107

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/06/10 08:33

編集2019/06/11 00:23

###環境
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin17]
Rails 4.2.6

###問題のコードと出力

ruby

1Product.find_by(id: @product.id).created_at

出力: Mon, 10 Jun 2019 15:39:15 JST +09:00

ruby

1from = Time.current.beginning_of_day.in_time_zone() 2to = Time.now.end_of_day.in_time_zone 3 4Product.find_by(id: @product.id, created_at: from..to)

出力:
Product Load (0.8ms) SELECT products.* FROM products WHERE products.id = 1 AND AND products.created_at = '--- !ruby/range\nbegin: 2019-06-09 15:00:00.000000000 Z\nend: 2019-06-10 14:59:59.999999999 Z\nexcl: false\n' LIMIT 1
nil

ruby

1Product.find_by(id: @product.id, created_at: from + 9.hour..to + 9.hour)

出力:
Product Load (0.8ms) SELECT products.* FROM products WHERE products.id = 1 AND AND products.created_at = '--- !ruby/range\nbegin: 2019-06-10 00:00:00.000000000 Z\nend: 2019-06-10 23:59:59.999999999 Z\nexcl: false\n' LIMIT 1
nil

###知りたいこと
なぜ時間の範囲内であるはずのレコードを取得できないのかが知りたいです。
またrangeオブジェクトをJSTで取得する方法を知りたいです。
他にも、今日一日のレコードを取得する方法があれば教えて頂きたいです。
なにかご教示いただけることがあれば、なにとぞよろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/06/10 09:21

回答依頼いただきましたがRubyについてはタグ登録もしておらずほとんど分かりませんので、次からはなるべく当該タグのスコアの高い方に振っていただければと。
maisumakun

2019/06/10 10:18

Railsのバージョンはいくつでしょうか?
s_diff

2019/06/11 00:21

mts10806様、申し訳ありません。確認不足でした。ご指摘ありがとうございます。以後気をつけます。
s_diff

2019/06/11 00:24

maisumakun様 ご質問ありがとうございます。 当方の環境を追記しております。
guest

回答2

0

投稿2019/06/10 12:59

mypt

総合スコア170

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

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

s_diff

2019/06/11 00:25

find_byはrangeが使えないのですね。 ありがとうございます!
guest

0

ベストアンサー

該当するのは一件だけではなく、複数件数でしょうか?
find_byだと該当してもしなくても一件しか返さないので、そのあたりも念の為ご確認ください。

今日一日のレコード

from = Time.current.beginning_of_day.in_time_zone to = from + 1.day Product.where(created_at: from...to)

とかではいかがでしょう? (当日0時から、翌日0時未満)
表示されるSQLが、実際に期待しているSQLに合うかどうかも見てくださいね。
whereを使うので、ActiveRecord::Relation(該当するレコードの配列)になりますが。

投稿2019/06/10 12:52

suama

総合スコア1997

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

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

s_diff

2019/06/11 00:35

ご回答ありがとうございます。 ご提示していただいたコードで期待通りの機能にすることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問