2
0

More than 1 year has passed since last update.

gem acts_as_list の使い方

Last updated at Posted at 2022-01-10

acts_as_listとは

indexページなどで一覧表示しているデータの並び替えを簡単の実装できるgemのことです。このgemを利用することで各データごとに ”↑”、”↓” などのリンクを表示させクリックすることでそれぞれの並びを一つ上、一つ下と変更することが簡単になります。

acts_as_list使い方

・Gemfileに以下を追加し、bundle install

gem 'acts_as_list'

・”position”カラムの追加

acts_as_listで並び替えをする際の基準となるカラムは、”id”ではなく”position”というカラムです。これはもちろん元々モデルにあるものではないため、もしモデルを作成済みであれば新くmigrationファイルを作り、カラムを追加する必要があります。

・migrationファイルの作成

Taskモデルにカラムを追加したい場合以下のmigrationファイルを作成します。

class AddColumnPositionToTasks < ActiveRecord::Migration[5.2]
  def change
    add_column :tasks, :position, :integer
  end
end

こちらのファイルを作成した後 rails db:migrate 。

(もし既存のデータがある場合、positionカラムにデータを入れておかなくてはいけません。自分の場合はrailsコンソールで各データのidを初期のpositionの値としました。)

・modelファイルにacts_as_listを利用するためのコードを追加する

カラムを用意しただけではgemの機能を使えるようにはなりません。並び替えの機能をモデルに追加するために、modelファイル内に”acts_as_list”というコードを追加してください。これで並び替えの機能を利用できるようになります。

class Task < ApplicationRecord
  acts_as_list #この一行を追加
end

・viewページに並び替えのリンクを追加する

一覧表示されているデータに並び順を変更するアクションへのリンクを書きます。

%h1 データ一覧
%table
  - tasks.each do |task|
    %tr
      %td= task.title
      %td= task.body
      %td= link_to "↑", move_higher_task_path(task) # 並び順をひとつ上へ
      %td= link_to "↓", move_lower_task_path(task) # 並び順をひとつ下へ

・ルーティングの追加

viewに追加したリンクを並び替えのアクションに紐付けるためのルーティングを記述します。

resources :tasks do
  member do
    get :move_higher
    get :move_lower
  end
end

・actionの追加

最後に、並び変えの機能を利用できるようになったのでcontroller内で実際の並び替えをするコードを書いていきます。

def index
  @tasks = Task.all.order(:position) # Task.allだけだとIDの順番でデータが表示されてしまうため"position"カラムを基準に並べ替えをする必要がある
end

def move_higher
  Task.find(params[:id]).move_higher # viewで選択したtaskを一つ上の並び順に変更する
  redirect_to tasks_path
end

def move_lower
  Task.find(params[:id]).move_lower # viewで選択したtaskを一つ下の並び順に変更する
  redirect_to tasks_path
end

これだけでデータを一覧表示する際の並び順を簡単に変更することができます。

タスク管理など優先順位の入れ替えなどをしたいときに便利なgem “acts_as_list”の使い方でした。

2
0
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
0