【问题标题】:Inherting data from other models?从其他模型继承数据?
【发布时间】:2012-02-29 23:08:46
【问题描述】:

我有以下型号:

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

在我创建 Release 时,我可以为其分配轨道。当我创建一个产品(在一个版本下)时,我希望它继承分配给它的曲目,但能够修改订单、添加和删除曲目。

这种方法背后的原因是,在大多数情况下,多个产品的曲目都是相同的,因此可以节省重新列出/上传曲目的工作。我可以简单地从发行版中提取曲目,但我必须有能力改变这一点,例如可能会有一个带有奖励曲目的 iTunes 独家。

我猜我需要在 Product 控制器的 new & create 操作中添加一些行来促进这一点?谁能提供一些指导?

如果没有在发布级别添加的额外曲目后来在产品级别添加,我如何确保它也包含在发布级别?

将 Jquery 拖放发布到产品方法是最好的吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案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
    

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

    希望这会有所帮助。

    【讨论】:

    • 必须将 :release_tracks 更改为 release_tracks。我在 before_save do 部分得到了一个错误,它说“未定义的方法`release_track_ids'”另外,我看不到对形成 HABTM 关系的 products_tracks 表的任何引用?
    • 好吧,如果你重命名了协会releases_tracks,那么方法就是releases_tracks_ids。
    • 我自己应该已经发现了!完美运行,非常感谢!我现在需要弄清楚的是,如果我在创建产品后在发布级别添加轨道,我如何促进包含它而无需删除产品并重新创建产品以拉入所有轨道?
    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多