在 rails 中排序 many_to_many 关系
ordering a many_to_many relationship in rails
我想在播放列表中实现项目列表的拖放。播放列表内容具有不同的活动记录类型。我需要存储位置并将其保存在数据库中并使用 acts_as_list 处理排序。我不确定我是否正确地建立了关联。
我使用联接 table 建立了 has_many_through 关系,但我不确定如何让 acts_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
我的加入迁移 table 看起来像这样:
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
到目前为止,我的加入 table 模型中有这个:
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
您需要 contents_playlists
(或 playlists_contents
- 因为该模型称为 PlaylistsContents?)table 中的 position
字段。您可以使用以下方式添加多个范围:
acts_as_list scope: [:playlist, :link, :media]
编辑:添加了 :playlist
我想在播放列表中实现项目列表的拖放。播放列表内容具有不同的活动记录类型。我需要存储位置并将其保存在数据库中并使用 acts_as_list 处理排序。我不确定我是否正确地建立了关联。
我使用联接 table 建立了 has_many_through 关系,但我不确定如何让 acts_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
我的加入迁移 table 看起来像这样:
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
到目前为止,我的加入 table 模型中有这个:
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
您需要 contents_playlists
(或 playlists_contents
- 因为该模型称为 PlaylistsContents?)table 中的 position
字段。您可以使用以下方式添加多个范围:
acts_as_list scope: [:playlist, :link, :media]
编辑:添加了 :playlist