railsで前後の記事のレコードを取得して「次の記事」「前の記事」に遷移させる方法

f:id:daikiyano:20181016223326p:plain
今回は、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情報を取得してそれぞれのページへ遷移します。

f:id:daikiyano:20181016222839p:plain

>文系エンジニア大学生の技術ブログ

文系エンジニア大学生の技術ブログ

社会が多様化していく中、大学生の学生生活も多様であるべきと考えています。主にエンジニア向けにITやプログラミングなどの技術系と大学生向けに休学、留学、海外生活、トビタテ留学、長期インターンに関する記事を書いています。