1
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 acts_as_list gem 使ってみた

Posted at

環境

  • Rails8
  • Ruby.3.3.6

読んで欲しい人

  • acts_as_list gemについてざっくりと知りたい人
  • 過去の自分

acts_as_list gemとは

リスト内のオブジェクトをソートしたり、並び替えしたりする機能を提供してくれるgemです
使用するには、positionカラムを追加する必要があります

使い方

ここではReadMeにあるように、TodoListモデルとTodoItemモデルを例としてあげます

todo_list.rb
class TodoList < ActiveRecord::Base
  has_many :todo_items
end
todo_item.rb
class TodoItem < ActiveRecord::Base
  belongs_to :todo_list
end

gemを追加

gemfileに追加します

gem 'acts_as_list'

既存のテーブルにpositionカラムを追加する

任意のテーブルにpositionカラムを追加します

rails g migration AddPositionToTodoItem position:integer
rake db:migrate

Modelにacts_as_listメソッドを追加する

todo_list.rb
class TodoList < ActiveRecord::Base
  has_many :todo_items, -> { order(position: :asc) }
end

:todo_items, -> { order(position: :asc) }positionカラムの昇順に並び替えることを指定しています

todo_item.rb
class TodoItem < ActiveRecord::Base
  belongs_to :todo_list
  acts_as_list scope: :todo_list
end

acts_as_list scope: :todo_listを指定してあげると下記のメソッドが使用できるようになります

  • move_higher: 順序を一つ上げる
  • move_lower: 順序を一つ下げる
  • move_to_top: リストの最上位に移動する
  • move_to_bottom: リストの最下位に移動する

使い方はこんな感じ

todo_list = TodoList.find(1)
todo_item = todo_list.todo_items.create(name: '新しいタスク')

todo_item.move_higher
todo_item.move_to_top

acts_as_list scope: :todo_listを定義してあげると、新しいレコード追加時にacts_as_listがよしなにpositionカラムのディフォルト値を設定してくれます

感想

  • Railsの並び替え界隈では一番有名なgemなんですかね、これ以外調べてもあまり出てこなかった。

参照

1
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
1
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?