在这种情况下如何做到最好?

时间:2011-05-17 15:24:28

标签: ruby-on-rails ruby optimization models polymorphic-associations

我有树型会议,客户,联系。

当我创建新会议时,我可以选择客户端或联系人,但是如何更好地存储此结构和关联? !会议表中的用例client_id和contact_id不太好。

1 个答案:

答案 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

您可以在此处阅读有关多态关联的更多信息: