今回は、railsで前後の記事のレコードを取得して「次の記事」「前の記事」の作成する方法についてご紹介します。
よくブログやサイトでみるあれです。
前提として
- modelの名前はarticle
- articleのidを使って実装を行う。
前後のレコードを取得出来るように実装してみる
app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base def previous Article.where("id < ?", self.id).order("id DESC").first end def next Article.where("id > ?", self.id).order("id ASC").first end end
self.idというのは取得したid自身のことを指す。
id番号が5であれば、5のことを指し、5よりも小さいidのみを取得する。
orderでid DESCなのでidは
5 4 3 2 1
の順番で並ばれているはずです。
firstは先頭のレコードを取得するのでこの場合該当するidは4になります。
よって、prevボタンを押したらid番号4の記事を取得するので、一つ古い記事の画面へ遷移することになります。
articles_controller.rb
class ArticlesController < ApplicationController def show @article = Article.find(params[:id]) end end
app/views/articles/show.html.erb
<% if @article.previous.present? %> <%= link_to "PREV", article_path(@article.previous), class: "btn_arrow_back"%> <% end %> <% if @article.next.present? %> <%= link_to "NEXT",article_path(@article.next), class: "btn_arrow" %> <% end %>
present?はblank?のようなもので真偽値です。
なので、前後にidが存在しない場合は、遷移のボタンが表示されないようになります。
article_pathはshowページのパスで前後のid情報を取得してそれぞれのページへ遷移します。