Rails 4 アプリで、データベース内の (n 番目の) 次または前の行を取得する関数をモデルに定義し、データベース全体をラップして、以下Item.last.next
を参照しItem.first
ます。
def next(n=0)
following = Item.where("id > ?", self.id).order("id asc") + Item.where("id < ?", self.id).order("id asc")
following[n % following.length]
end
def prev(n=0)
n = n % Item.count-1
previous = Item.where("id < ?", self.id).order("id desc") + Item.where("id > ?", self.id).order("id desc")
previous[n % previous.length]
end
これにより、メソッド呼び出しごとに 3 つのデータベース クエリが発生します。データベース クエリを最小限に抑えることを学んだので、1 つのクエリだけでこの結果を取得する方法があるかどうか疑問に思います。