Упорядочение отношений 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