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

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

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

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

Q&A

解決済

2回答

568閲覧

日付が変わったらレコードを自動更新したい

morioka1206

総合スコア33

Ruby on Rails 6

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

0グッド

0クリップ

投稿2022/01/17 04:53

編集2022/01/17 05:12

締切日のカラムがあり、それと今日の日付(Date.today)と計算し、その結果が自動的に残り日数のカラムに保存されるようにしたいのですが、どのようにやればいいかわかりません。
現在同じテーブル内に締め切り日と案件名などのカラムがありますが、別テーブルで管理させた方がいいのかなとは思っています。

ransackを使い、検索したいのですが表示するだけなら残り日数を計算で表示されたらいいだけだと思うのですが
残り5日のもの、残り1ヶ月のものなどを検索するためにカラムに保存する必要があるのでどうすればいいのかなと思っています。

counter_cashなどで自動更新できそうではあるのですがそのやり方でいいかなどアドバイス頂けましたら嬉しいです。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

残り5日のもの、残り1ヶ月のものなどを検索するためにカラムに保存する必要があるので

ありません。単に「期限が5日後のもの」で検索すれば済む話です。

投稿2022/01/17 05:14

maisumakun

総合スコア145184

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

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

maisumakun

2022/01/17 05:17

ransackでの検索にスコープを使うこともできますので、「期限までの日数」を「期限日」に換算して検索するスコープを立てれば、データの方を触る必要は全くありません。
morioka1206

2022/01/17 10:09

スコープでDate.todayと期限までの計算ができるんですか?
maisumakun

2022/01/17 10:20

そうですね、.where(date: Time.zone.today + 5.days)のようにすれば「期限が5日後」の案件を検索できます。5の部分は引数で取ってはめ込めばOKです(文字列で来るのでto_iは必要かもしれないです)。
morioka1206

2022/01/17 10:34

>=などをすると、〜以内、〜以上もできるのでしょうか? ちょっとうまくまだいっていないのですが、いろいろ試してみます。 ありがとうございます。
morioka1206

2022/01/17 10:59

.where("date > ?", 5) 比較だとこちらですかね?
morioka1206

2022/01/17 11:07 編集

# 残り日数をだすスコープ scope :day_left, -> { where("deadline > ?", Time.zone.today + 5.days )} def self.ransackable_scopes(auth_object = nil) %i(day_left) end こちらで情報を取得できました。比較演算子を逆にした場合は情報が出てこなかったので(その条件に一致するものがなかったので)これで検索させることができるかと思います。 まだransackのリンクで試してないのでわかりませんが、〜日から5日までのなど範囲指定できるか試してみます。 ありがとうございました。
guest

0

自己解決

model

1# 残り日数をだすスコープ 2 scope :day_left, -> { where("deadline > ?", Time.zone.today + 5.days )} 3 def self.ransackable_scopes(auth_object = nil) 4 %i(day_left) 5 end

投稿2022/01/17 11:09

morioka1206

総合スコア33

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問