如何在Rails中改进这种关联

时间:2010-12-11 13:46:11

标签: ruby-on-rails

嘿伙计们 我想建立一个数据库和它们之间的一些关联,下面是一些描述

  1. 鼓手和视频是多对多关联,因为有时会有多个鼓手出现在一个视频剪辑中

  2. Cy钹和视频只是多对多关联,原因相同

  3. 事件和视频是一对多的,因为一个视频只代表一个事件是有意义的

  4. 所以对于前两个我的解决方案是在两侧使用两个has-and-belongs-to-many-many关联符号,而对于第三个我使用简单的一对多: 这是代码:

    class Drummer < ActiveRecord::Base
      has_and_belongs_to_many :videos
    end
    
    class Cymbal < ActiveRecord::Base
      has_and_belongs_to_many :videos
    end
    
    class Video < ActiveRecord::Base
      has_and_belongs_to_many :drummers
      has_and_belongs_to_many :cymbals
      belongs_to :event
    end
    
    class Event < ActiveRecord::Base
      has_many :videos
    end
    

    但我认为多态是更好的解决方案,视频应该应用两个很多其他模型,但我不知道如何建立多对多的多态关联,我已经问了一个关于这个的问题

2 个答案:

答案 0 :(得分:1)

这个怎么样:

class Interpreter < ActiveRecord::Base
  belongs_to :video
end

class Drummer < Interpreter
end

class Cymbal < Interpreter
end

class Video < ActiveRecord::Base
  has_and_belongs_to_many :interpreters
  has_and_belongs_to_many :drummers
  has_and_belongs_to_many :cymbals
  belongs_to :event
end

class Event < ActiveRecord::Base
  has_many :videos
end

Video.first.interpreters应该返回所有的德鲁姆和钹,而Video.first.drummersVideo.first.cymbals只会返回相应的模型 CymbalsDrummers将共享相同的数据库表interpreters

答案 1 :(得分:0)