我有树型会议,客户,联系。
当我创建新会议时,我可以选择客户端或联系人,但是如何更好地存储此结构和关联? !会议表中的用例client_id和contact_id不太好。
答案 0 :(得分:1)
我们假设有人(创作者)可以创建会议。创建者可以是客户或联系人。
为此,您首先需要在会议桌上添加“creator_type”和“creator_id”列,因此请使用script/rails generate migration AddTypeToMeetings
然后编辑迁移文件,如:
class AddTypeToMeetings < ActiveRecord::Migration
def self.up
add_column :meetings, :creator_id, :integer
add_column :meetings, :creator_type, :string
end
end
其次,你必须调整你的模型:
<强> meeting.rb 强>
class Meeting < ActiveRecord::Base
# polymorphic association
belongs_to :creator, :polymorphic => true
end
<强> client.rb 强>
class Client < ActiveRecord::Base
has_many :meetings, :as => :creator
end
<强> contact.rb 强>
class Contact < ActiveRecord::Base
has_many :meetings, :as => :creator
end
使用方法:
@my_meeting = Meeting.new
@my_meeting.creator = @my_client
# or if you want a contact:
@my_meeting.creator = @my_contact
您可以在此处阅读有关多态关联的更多信息: