Rails ActiveRecordで前後のレコードを取得する

ActiveRecord モデルのインスタンスで前後のレコードを取得したかったのですけど、Rails 標準の API では見つかりませんでした。some_instance.previous, some_instance.next で、some_instance の前後レコードのインスタンスを取得できるようにしたかった。

— 環境 —
rails 4.1
activerecord 4.1

スポンサーリンク

previous, next メソッドを対象モデルに実装

以下のように該当のモデルに、previous, next インスタンスメソッドを作成しました。

検索して調べてたら、id から ±1 して実装してある例も見つけたのですけど、それだとレコードが削除された時に id が抜けている可能性があるので汎用的でないと考えました。

なので、現在のインスタンス(self)の id より小さい/大きいかで判定。各々、直前(previous)/直後(next) のレコードを取得しています。

これで当初の目論見通り some_instance.previous, some_instance.next で、前後のレコードのインスタンスを簡単に取得できるようになり大変便利。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!