Ruby on rails 一个模型可以属于其他两个模型中的任何一个吗

Ruby on rails 一个模型可以属于其他两个模型中的任何一个吗,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,activerecord,associations,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,Activerecord,Associations,我会尽力解释这一点 我有三种型号 分配事件 初级指派 二次分配 我需要DistributionEvent属于PrimaryAssignment或SecondaryAssignment,并显示在数据库的同一列中 像这样的 class DistributionEvent < ActiveRecord::Base belongs_to :primaryassignment belongs_to :secondaryassignment end class PrimaryAssignment

我会尽力解释这一点

我有三种型号

分配事件 初级指派 二次分配

我需要DistributionEvent属于PrimaryAssignmentSecondaryAssignment,并显示在数据库的同一列中

像这样的

class DistributionEvent < ActiveRecord::Base
 belongs_to :primaryassignment
 belongs_to :secondaryassignment
end

class PrimaryAssignment < ActiveRecord::Base
 has_many :distribution_event
end

class SecondaryAssignment < ActiveRecord::Base
 has_many :distribution_event
end
class DistributionEvent
但是DistributionEvent在表中应该只有一列(赋值或其他)指向primaryassignments或secondaryassignments

我希望这是有意义的

有人知道如何有效地实现这一点吗


谢谢

是的,具有多态性关联。文档可在此处找到:

class DistributionEvent
确保还为类型添加一列:

class AddAssignmentTypeToDistributionEvent < ActiveRecord::Migration
  def change
    add_column :distribution_events, :assignment_type, :string
  end
end
class AddAssignmentTypeToDistributionEvent
这是两列,不是吗?它满足“一列”要求,因为它只允许一个单一的分配与每个分发事件关联。但是,是的,它确实使用了数据库中的两列。为什么有人会给答案打负号,这可能是一种选择。特别是,因为问题没有指定所有的条件和约束条件……因为当我看到答案时,它只是指向多态关联指南页面的一个链接,这似乎不是一个非常有用的答案——事实上,当它被戏剧性地编辑时,我正要标记它。@Shadwell:好,现在,我从哪里看到了所有这些缺点,以及它们的原因。那么您认为问题中的描述不足以理解源/链接指向何处?除此之外,这家伙看起来像是在哈利波特中,后来又加上了他的代码,但是你删除了负号了吗?为什么只有一列?我猜它是foreign id列。我猜它真的不必是,但我认为这是最合乎逻辑的方式,因为每个DsitributionEvent行都必须有PrimaryAssignment或SecondaryAssignment。这将避免在每个条目上都有两列,其中一列为空白。那么我猜@panmari的答案是传统的方式。
class AddAssignmentTypeToDistributionEvent < ActiveRecord::Migration
  def change
    add_column :distribution_events, :assignment_type, :string
  end
end