我有以下型号:
class Release < ActiveRecord::Base
has_many :products, :dependent => :destroy
has_and_belongs_to_many :tracks
end
class Product < ActiveRecord::Base
belongs_to :release
has_and_belongs_to_many :tracks
end
class Track < ActiveRecord::Base
has_and_belongs_to_many :releases
has_and_belongs_to_many :products
end
在我创建发布时,我可以为其分配曲目。当我创建一个产品(在一个版本下)时,我希望它继承分配给它的轨道,但能够修改顺序,添加和删除轨道。
这种方法背后的原因是,在大多数情况下,曲目在多个产品中是相同的,因此可以节省重新列出/上传曲目的工作量。我可以简单地从发行版中拉出曲目,但我必须有能力改变这一点,例如可能有iTunes专属的奖励曲目。
我猜我需要在新的&amp;创建产品控制器的动作以促进这一点?任何人都可以提供一些指导吗?
如果稍后在产品级别添加了未在发布级别添加的额外轨道,我如何确保它也包含在发布级别?
Jquery拖放Release to Product方法是否最佳?
答案 0 :(得分:1)
所以你可以做如下的事情:
class Product < ActiveRecord::Base
belongs_to :release
has_many :release_tracks, through: :release, source: :tracks
has_and_belongs_to_many :tracks
before_save do
self.track_ids = self.release_track_ids
end
end
这样,您应该始终拥有该版本附带的原始曲目列表,并且您有一个与该曲面相关联的曲目列表。现在,您可以添加和删除产品中的曲目,并始终了解原始版本附带的曲目。
希望这有帮助。