我会尽力解释这个问题。
我有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应该只在表中有一列(赋值或其他)指向主分配或辅助分配。
我希望有道理。
任何人都有任何关于如何有效实现这一目标的线索?
谢谢!
答案 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