2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsのRansackとsort_linkで簡単に並び替え機能を実装する方法【Bootstrap対応】

Posted at

背景

実務で検索機能を実装する際、データの並び替えもできるようにしたい、という要望がありました。既にRansackを使った検索機能は実装済みでしたが、並び替え機能も追加するために sort_link を活用することになりました。この実装内容をまとめて記録として残します。また、今回の実装はBootstrapを用いてスタイリングしており、基本的なデザインの調整も行いました。

Ransackとは

Ransackは、Ruby on Railsにおいて簡単に検索機能を追加できるGemです。Ransackを使うと、条件に基づいたデータの検索ができるフォームや、指定したカラムによる並び替えが可能になります。検索ロジックを簡潔に書けるだけでなく、カスタムした条件にも対応しやすく、特に管理画面などでのデータ検索や並び替えが必要な場面で重宝します。

sort_linkとは

sort_link は、Ransackが提供するメソッドの一つで、並び替えリンクを生成します。sort_link を使用することで、簡単に指定したカラムの昇順・降順で並び替えが可能になります。ボタンやリンクをクリックするだけで並び替えが行われるため、UI/UX向上にもつながります。また、カスタマイズ可能なクラスを指定することで、スタイルも自由に調整できます。

実装手順

  1. テーブルの構造
    今回はBootstrapを使い、スタイルを設定しています。以下のようなテーブル構造で各列に sort_link を設置し、データを並び替え可能にします。
thead.table-dark
  tr
    th.text-nowrap
      = sort_link(@search, :created_at, "登録日", {class: "text-decoration-none text-white"})
    th.text-nowrap
      = sort_link(@search, :delivery_enduser_created_at, "送信日", {class: "text-decoration-none text-white"})
    th.text-nowrap 店舗名
    th.text-nowrap クライアント名
    th.text-nowrap 電話番号
    th.text-nowrap 理由
    th(style="min-width: 40px;") 通話メモ
    th(style="min-width: 40px;") コメント
    th.text-nowrap 詳細情報

※「delivery_enduser_created_at」はモデルファイルで専用のスコープを定義しています。

  ransacker :delivery_enduser_created_at do
    Arel.sql('delivery_endusers.created_at')
  end

sort_link メソッドの第一引数には、@search オブジェクトを指定しています。このオブジェクトは、Ransackでの検索条件を保持するもので、並び替えリンクでもこれを利用します。

第二引数には並び替えを行いたいカラム名を指定し、第三引数に表示するカラムのタイトルを渡します。

最後のオプション引数には、Bootstrapを使ったクラス (text-decoration-none text-white) を指定し、リンクのデザインを調整しています。

  1. 並び替えの動作
    sort_link をクリックすると、指定したカラムのデータが昇順・降順で切り替わります。例えば、「登録日」をクリックすると、その列のデータが昇順に並び替えられ、再度クリックすると降順に切り替わります。これにより、ユーザーは簡単に見たい順序でデータを整理して表示することができます。

  2. Bootstrapでのスタイリング
    今回は thead.table-dark クラスを使ってヘッダーにダークテーマを適用しています。また、各リンクに text-decoration-none や text-white クラスを追加して装飾を取り除き、見やすい白文字に設定しました。さらに、ヘッダー行の一部に min-width スタイルを直接指定することで、列幅の固定も行っています。

まとめ

sort_link を活用することで、Ransackの検索機能に並び替え機能を簡単に追加でき、ユーザーにとって使いやすいUIを構築することができます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?