- 更新日: 2014年10月28日
- Rails
Rails ActiveRecordで前後のレコードを取得する
スポンサーリンク
ActiveRecord モデルのインスタンスで前後のレコードを取得したかったのですけど、Rails 標準の API では見つかりませんでした。some_instance.previous, some_instance.next で、some_instance の前後レコードのインスタンスを取得できるようにしたかった。
— 環境 —
rails 4.1
activerecord 4.1
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
previous, next メソッドを対象モデルに実装
以下のように該当のモデルに、previous, next インスタンスメソッドを作成しました。
1 2 3 4 5 6 7 8 9 10 11 |
class SomeModel < ActiveRecord::Base # ... def previous SomeModel.where("id < ?", self.id).order("id DESC").first end def next SomeModel.where("id > ?", self.id).order("id ASC").first end end |
検索して調べてたら、id から ±1 して実装してある例も見つけたのですけど、それだとレコードが削除された時に id が抜けている可能性があるので汎用的でないと考えました。
なので、現在のインスタンス(self)の id より小さい/大きいかで判定。各々、直前(previous)/直後(next) のレコードを取得しています。
これで当初の目論見通り some_instance.previous, some_instance.next で、前後のレコードのインスタンスを簡単に取得できるようになり大変便利。
- – 参考リンク –
- Rails: Previous and Next record from previous query – Stack Overflow
- sql – Rails: Get next / previous record – Stack Overflow
- Rails — A faster way for next and previous links on a post, article, or any model
スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!