0

我有一个模型“条目”,当playlist_id指定 a 时,我需要它像列表一样工作,但如果不是,我需要它不像列表一样工作。(acts_as_list 是我正在使用的宝石)

在我的模型代码中,我有:

acts_as_list scope: :playlist

我需要找出最好的方法来做到这一点。我可能正在考虑对模型进行子类化,但我更愿意将其保留为一个模型,但添加这个额外的逻辑。我不知道初始化的顺序,active_record所以我不确定在哪里可以搞砸这样的事情,在哪里不能。

(我需要这样做的原因:我想要属于另一个模型的松散项目,只需按日期排序。随着我的“默认列表”的大小增加,我遇到了一些性能问题,因为我们必须查看查找列表中的最后一个条目以了解最新项目的位置。)

4

1 回答 1

0

我的浅薄理解是模型投影可能需要改进。在我的理解中,关系act_as_list更好,比如说一个待办事项正好在一个待办事项列表中。has_manybelongs_to

但是在您的情况下,假设条目是一首歌。一个播放列表可以有很多歌曲,而一首歌曲可以属于很多播放列表。所以关系是多对多的。

我认为您需要一个中间模型ListItem来表示这种关系

class PlayList < ActiveRecord::Base
  has_many :list_items
  has_many :entries, through: :list_items
end

class ListItem < ActiveRecord::Base
  belongs_to :play_list
  belongs_to :entires
  acts_as_list scope: :play_list
end

class Entries < ActiveRecord::Base
  has_many :list_items
  has_many :play_lists, through: :list_items

通过这种设计,您在 PlayList 上排序的只是列表项,而不是条目。只要播放列表中不包含太多 list_items,性能应该会提高很多,这应该很常见。

于 2014-03-11T20:03:50.720 回答