環境
- 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なんですかね、これ以外調べてもあまり出てこなかった。
参照