Упорядочение отношений many_to_many в рельсах

Я хотел бы реализовать перетаскивание списка элементов в списке воспроизведения. Содержимое плейлиста имеет разные типы активных записей. Мне нужно сохранить позицию и сохранить ее в базе данных и обработать порядок с помощью act_as_list. Я не уверен, что правильно строю ассоциации.

Я построил отношения has_many_through с помощью таблицы соединений, но я не уверен, как заставить действовать activ_as_list с этой конфигурацией.

Мои модели такие:

class Playlist < ActiveRecord::Base

  belongs_to :group
  belongs_to :user

  has_many :links, through: :playlists_contents dependent: :destroy
  has_many :medias,  through: :playlists_contents dependent: :destroy
end

Моя миграция для таблицы соединений выглядит следующим образом:

class CreateJoinTable < ActiveRecord::Migration[5.0]
  def change
    create_table :contents_playlists do |t|
      t.belongs_to :link, index: true
      t.belongs_to :media, index: true
      t.belongs_to :playlist, index: true
    end
  end

У меня есть это до сих пор в моей модели таблицы соединений:

class PlaylistsContents < ActiveRecord::Base

  default_scope -> { order(position: :asc) }

  default_scope :order => 'position'
  belongs_to :playlist
  belongs_to :link
  belongs_to :media
  acts_as_list :scope => :link
  acts_as_list :scope => :media

end

1 ответ

Решение

Вам понадобится position поле в contents_playlists (или же playlists_contents - как называется модель PlaylistsContents?) таблица. Вы можете добавить несколько областей, используя:

acts_as_list scope: [:playlist, :link, :media]

Редактировать: добавлено :playlist

Другие вопросы по тегам