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

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

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