Pass
モデルのクラスメソッドを定義すればいいですね。
既存のコードをそのまんま生かすなら
rb
1class Pass < ApplicationRecord
2 def self.xxx
3 where("start_date < ?", Time.zone.now).where("end_date > ?", Time.zone.now).last
4 end
5end
となります。メソッド名は思いつかなかったのでとりあえず xxx
にしてあります。
コントローラーでは,
とすればいいわけです。
ただ,
rb
1where("start_date < ?", Time.zone.now).where("end_date > ?", Time.zone.now)
の部分はスコープを定義するのが見通しがよいかと思います。つまり,
rb
1class Pass < ApplicationRecord
2 scope :within_period,
3 ->{ where "start_date < :now AND end_date > :now", now: Time.zone.now }
4
5 def self.xxx
6 within_period.last
7 end
8end
みたいな。スコープ名がこれで適切かは自信がありませんが。
これで回答にはなっているかと思いますが,二つ疑問があります。
start_date
や end_date
は,名前からすると時刻じゃなくて date
型ですよね。それを時刻と比較して,意図どおりの検索になっているのかどうか。
また,last
を取っていますが,これが意味を持つためには,where
の絞り込みで得られるレコードが確実に何かの順序になっている必要があります。
しかし,order
を使っていないので,レコードの追加が何かの順序になっているのでないかぎり,last
には意味が無いことになります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。