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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1221閲覧

【Rails】データベースから最新の複数データを取得したい

HideStar

総合スコア13

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/29 08:23

前提・実現したいこと

データベースに保存したレコードから、最新の複数データを取得したい。
(一度に複数のデータをCSVで保存し、1日に複数回保存する可能性もあります。)

発生している問題

以下のように、order、firstで最新のデータを取得し、whereでcreated_atを指定して絞り込んでいるつもりなのですが、
最後の1件しか表示されません。(データベースには登録されています。)

なぜ1件しか取得されないのでしょうか?
また、適切な方法がありますでしょうか?
ご教授宜しくお願い致します。

ruby

1#controller.rb 2 def index 3 coupons_new = Coupon.order(created_at: :desc).first.created_at 4 @coupons = Coupon.where('created_at = ?', coupons_new) 5 end

ruby

1#index.html.erb 2<% @coupons.each do |coupon| %> 3 <table>で各カラムを表示 4 5<% end %> 6 7

補足情報(FW/ツールのバージョンなど)

Rubyバージョン:2.6.6p146
Railsバージョン:5.2.4.3

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

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

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

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

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

gouf

2020/07/29 12:46

「BETWEEN x AND y」構文で created_at に範囲をもたせて検索した場合、なにか変化は見られますか? (eg. created_at と created_at から 3日前)
HideStar

2020/07/30 01:13

以下のコードで3日前からのデータを検索すると、きちんと3日前からの登録データが表示されていました。 created_atは秒単位までしか記録されないと勘違いしていました、、、 @coupons = Coupon.where(created_at: (coupons_new.ago(3.days))..(coupons_new))
guest

回答1

0

ベストアンサー

coupons_new = Coupon.order(created_at: :desc).first.created_at @coupons = Coupon.where('created_at = ?', coupons_new)
ですと、coupons_new はひとつの値です。表示は秒までかもしれませんがもっと細かいところまで記録されています。
それとぴったり同じ 'created_at = ?', coupons_new なものはそうたくさんは無いでしょう。
「最新の複数データ」の最新の定義は?

投稿2020/07/29 09:57

winterboum

総合スコア23567

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

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

HideStar

2020/07/30 00:42

なるほど! 秒以降も記録されているのですね。 最新の複数データの定義は、 「直近で1つのCSVファイルから登録した全てのデータ」 です。 CSVアップロード時に確認用としてそれらをビューに表示させ、 楽天APIにリクエストを送りたいのです。 1日に複数回登録する可能性もある為、日付指定では解決できず、、、 gouf様の仰るようにBETWEENで1分間など範囲指定をするのが一番なのでしょうか。 (さすがに1分単位で登録することはないので)
winterboum

2020/07/30 03:04

CSVを読み込むののに必要な時間の何倍かで2回重ならない時間、ですね。 サーバーやネットワークの負荷で時間掛かることもあるので、ちょっと長めに。 もしくは もうひとつfieldを用意して、「操作開始時間」を入れる。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問