我有联系模式,包括姓名,地址,电话号码等。
我有一个应该有__联系的用户模型。
我有一个拥有多个联系人的客户模型。
我有一个生产者模型,它有很多联系人。
联系人只能是用户,用户和客户,用户和生产者,或这三者的任意组合。当联系人链接到多个模型以确保数据完整性时,我还需要确保链接相同的联系人记录。
我应该如何创建关联?
答案 0 :(得分:1)
这似乎是polymorphic association的一个很好的应用程序:
class User < ActiveRecord::Base
has_one :contact, :as => :contactable
end
class Customer < ActiveRecord::Base
has_many :contacts, :as => :contactable
end
class Producer < ActiveRecord::Base
has_many :contacts, :as => :contactable
end
class Contact < ActiveRecord::Base
belongs_to :contactable, :polymorphic => true
end
修改强>
似乎我没有一直阅读规范:)要将同一个联系人与多个用户,客户等关联,您可以使用has_many :through
:
class User < ActiveRecord::Base
has_one :user_contact, :dependent => :destroy
has_one :contact, :through => :user_contact
end
class Customer < ActiveRecord::Base
has_many :customer_contacts, :dependent => :destroy
has_many :contacts, :through => :customer_contacts
end
class Producer < ActiveRecord::Base
has_many :producer_contacts, :dependent => :destroy
has_many :contacts, :through => :producer_contacts
end
class UserContact
belongs_to :user
belongs_to :contact
end
class CustomerContact
belongs_to :customer
belongs_to :contact
end
class ProducerContact
belongs_to :producer
belongs_to :contact
end
class Contact < ActiveRecord::Base
has_many :user_contacts, :dependent => :destroy # might use 'has_one' here depending on your requirements
has_many :users, :through => :user_contacts
has_many :customer_contacts, :dependent => :destroy
has_many :customers, :through => :customer_contacts
has_many :producer_contacts, :dependent => :destroy
has_many :producers, :through => :producer_contacts
end
这为三个关联中的每一个提供了一个连接表。通过向连接表添加行,每个联系人可以属于其他三个模型中的一个,一个或多个。