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 には意味が無いことになります。