
By: Petyo Ivanov – CC BY 2.0
railscasts.com/episodes/147-sortable-lists-revised?language=ja&view=asciicast
Gemfile
いまはこちらが本家
github.com/swanandp/acts_as_list
1 | gem 'acts_as_list', git: 'git://github.com/swanandp/acts_as_list.git' |
model
wikiのとおりにModelにacts_as_listと書けばいい
has_manyで関連するモデルをいい感じに扱いたいときは
1 | has_many :benefits, dependent: :destroy, order: "position" |
1 2 | acts_as_list scope: :recipe default_scope order('position') |
これで新規作成のときも関連するモデルとかを考えて適切な順番を振ってくれる
View
positionは隠しフィールドにしておいて
1 | <%= f.hidden_field :position %> |
jQuery UI
細かいことを考えずに上から番号を振り直せばOK
セレクタの絞り込み方はもっとスピードがあがる方法があるかと思う
1 2 3 4 5 | $('#form_benefits').sortable axis: 'y' update: -> $('#form_benefits').find('li input[type=hidden][name*=position]').each (index, obj) -> $(obj).val(index + 1) |
これでhiddenが上から順番に並び替えられた
今回はキャンセルすれば順番は保存されてない
ちょっとリッチなjQuery UI Sortaleのつくりかた
AJAXで直接並び替えるパターンは
railscasts.com/episodes/147-sortable-lists-revised?view=asciicast