acts_as_list
データベース内の既存のテーブルに追加しようとしplaylists
ています。このテーブルには、ユーザーが作成した可能性のあるプレイリストが保存されています。目標は、ユーザーが自分のプレイリストを並べ替えることができるようにすることです。
この移行により、テーブル内のプレイリストのデフォルトの位置が設定されますが、位置はグローバルコンテキストで設定されます(たとえば、position
500個のプレイリストを含むテーブルの列は1〜500の順序になります)。
class AddPositionToPlaylistsTable < ActiveRecord::Migration
def self.up
add_column :playlists, :position, :integer
Playlist.reset_column_information
playlist = Playlist.find(:all, :order => "created_at ASC")
playlist.each_with_index do |p, i|
p.position = i+1
p.save
end
end
def self.down
remove_column :playlists, :position
end
end
アイテムの位置を500から499に移動しても、必ずしもユーザーの観点からの変更が反映されるとは限らないため、この順序には問題があります(50、70、100 position
、および500のプレイリストがある場合があるため)。
代わりに、ユーザーごとのコンテキストでテーブル内の各プレイリストの位置を設定します(たとえば、各ユーザーに5つのプレイリストがあるとすると、position
列には、ユーザーごとに1〜5の順序でプレイリストの複数のインスタンスがあります)。
これは可能ですか?もしそうなら、これを達成するために移行をどのように変更しますか?