在rails中订购多对多关系

时间:2018-11-21 05:52:09

标签: ruby-on-rails ruby activerecord ruby-on-rails-5 acts-as-list

我想对播放列表中的项目列表进行拖放。播放列表内容具有不同的ActiveRecord类型。我需要存储位置并将其保留在数据库中,并使用acts_as_list处理排序。我不确定我是否正确建立了关联。

我使用联接表建立了 has_many_through 关系,但是我不确定如何使act_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 个答案:

答案 0 :(得分:1)

您将需要在position(或contents_playlists –模型称为PlaylistsContents?)表中的playlists_contents字段。您可以使用以下方法添加多个范围:

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

编辑:添加了:playlist