2012-07-02 3 views
1

내 데이터베이스에있는 기존 playlists 테이블에 acts_as_list을 추가하려고합니다. 내 테이블에 사용자가 만든 재생 목록이 저장되어 있습니다. 목표는 사용자가 자신의 재생 목록을 정렬 할 수있게하는 것입니다.acts_as_list를 사용하여 하나의 열에서 여러 목록을 만들 수 있습니까?

이 마이그레이션은 테이블의 재생 목록에 대한 기본 위치를 설정하지만 위치는 전역 컨텍스트로 설정됩니다 (예 : 012 재생 목록이 포함 된 표의 경우 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 

그들이 position (50)가 재생 목록, (70)이있을 수 있습니다로 반드시 (사용자의 관점에서 어떤 변화를 반영하지 않을 500 ~ 499에서 항목의 위치를 ​​이동하기 때문에이 순서가 문제가 될 것이다 (100) , 및 500).

대신 사용자 별 컨텍스트에서 테이블의 각 재생 목록에 대한 위치를 설정하려고합니다 (예 : 각 사용자가 5 개의 재생 목록을 가지고 있다고 가정하면 position 열에는 각각에 대해 1-5 개의 재생 목록 인스턴스가 여러 개 있습니다. 사용자).

가능합니까? 그렇다면 마이그레이션을 어떻게 수정합니까?

답변

1

재생 목록 위치를 업데이트 할 때 사용자의 재생 목록 만 고려합니다. 그래서 처음부터 그렇게해야합니다. 이전의 up- 방법에서는 사용자 당 재생 목록을 모두 가져온 다음 색인을 늘릴 수 있습니다.

#.... 
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 
관련 문제