如何在Rails中建模“可以属于A或B”的关系?

时间:2009-06-06 17:43:18

标签: ruby-on-rails model

我是RoR的新手 - 我有三个模型:CustomerJobNote。客户拥有Jobs,客户和Jobs都可以拥有Notes。有一种特殊的方法可以在Rails中处理这种类型的关系,或者如果我与Note有一个正常的belongs_to关系会有效吗?

我担心的问题是包含customer_idjob_id字段的注释,但只有一个字段可用于单个记录(即特定注释可以指任何一个记录或者一个客户,但从来没有这两个),并且如果有一个列在一半时间内为空,那么数据库设计不是很好。

我是在想这个,还是有什么东西我不清楚?

1 个答案:

答案 0 :(得分:4)

我建议使用多态关联,因为它更灵活,可扩展,更容易实施。所需模型如下:

class Note < ActiveRecord::Base
   belongs_to :notable, :polymorphic => true
end

class Customer < ActiveRecord::Base
   has_many :notes, :as => :notable
end

class Job < ActiveRecord::Base
   has_many :notes, :as => :notable
end

迁移

create_table :notes do |t|
  t.references :notable, :polymorphic => {:default => 'Photo'}
end

有关多态关联的详细信息,我建议google