模型可以属于其他两个模型中的任何一个

时间:2015-08-10 20:05:06

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 activerecord associations

我会尽力解释这个问题。

我有3个模特。

DistributionEvent PrimaryAssignment SecondaryAssignment

我需要 DistributionEvent 来归属于 PrimaryAssignment SecondaryAssignment ,并显示在数据库的同一列中。

这样的事情

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

但是,DistributionEvent应该只在表中有一列(赋值或其他)指向主分配或辅助分配。

我希望有道理。

任何人都有任何关于如何有效实现这一目标的线索?

谢谢!

1 个答案:

答案 0 :(得分:3)

是的,具有多态关联。可以在此处找到文档:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

class DistributionEvent < ActiveRecord::Base
 belongs_to :assignment, polymorphic: true
end

class PrimaryAssignment < ActiveRecord::Base
 has_many :distribution_events, as: :assignment
end

class SecondaryAssignment < ActiveRecord::Base
 has_many :distribution_events, as: :assignment
end

确保还为类型添加一列:

class AddAssignmentTypeToDistributionEvent < ActiveRecord::Migration
  def change
    add_column :distribution_events, :assignment_type, :string
  end
end