2012-07-02 78 views
1

我試圖將acts_as_list添加到我的數據庫中的現有playlists表中,該表存儲我的用戶可能創建的任何播放列表。目標是讓用戶對自己的播放列表進行排序。我可以使用acts_as_list在一列中創建多個列表嗎?

此遷移將爲表格中的播放列表設置默認位置,但該位置將設置在全局上下文中(例如,對於其中包含500個播放列表的表格,position列將被排序爲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 position播放列表,70,100 ,和500)。相反,我想爲每個用戶上下文中的表中的每個播放列表設置一個位置(例如,假設每個用戶有5個播放列表,position列將有多個播放列表的實例,每個播放列表的排序順序爲1-5用戶)。

這是可能的,如果是的話,我將如何修改我的移民做到這一點?

回答

1

當更新您的播放列表的位置,你只需要在用戶的播放列表考慮在內。所以你應該從一開始就這樣做。在您的遷移的up -method中,您可以獲取每個用戶的所有播放列表,然後像您一樣增加索引:

#.... 
User.all.each do |user| 
    user_playlists = user.playlists(:order => "created_at ASC") 

    user_playlists.each_with_index do |p, i| 
    p.position = i+1 
    p.save 
    end 
end 
相關問題