2012-02-29 126 views
0

我有以下型号:从其他模型中获取数据?

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专享奖金曲目。

我猜我需要一些行添加到产品控制器的新&创建行动,促进呢?任何人可以提供一些指导?

在未在发布级别添加的额外跟踪稍后添加到产品级别的情况下,我如何确保它也包含在发布级别?

会jQuery的拖放发布产品的方法是最好的?

回答

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 

这样,你应该始终有一个版本附带的原创曲目列表,并且您有与相关的曲目列表proudct。现在,您可以添加和删除产品中的曲目,并始终了解原始发行版附带的内容。

希望这会有所帮助。

+0

会试试这个.....感谢。 – Raoot 2012-02-29 15:13:22

+0

请注意并接受它是否有效。谢谢! – TheDelChop 2012-02-29 15:15:48

+0

必须将release_tracks更改为releases_tracks。我在before_save do部分收到了一个错误,它说“未定义的方法'release_track_ids'”另外,我看不到任何关于形成HABTM关联的products_tracks表的参考? – Raoot 2012-02-29 15:51:30