我有两种模式:公司和商业。 该业务属于两家公司(供应商和客户)。所以我写道:
商业模式:
class Business < ActiveRecord::Base
belongs_to :client, :class_name => 'Company'
belongs_to :supplier, :class_name => 'Company'
end
公司型号:
class Company < ActiveRecord::Base
has_many :businesses
has_many :companies, through: :businesses
end
但我无法通过他的公司来@ company.companies访问与公司相关的公司。我怎么能这样做?
答案 0 :(得分:1)
您可以拥有一个额外的表BusinessRelationship,它具有&#34; relationship_type&#34;等属性。这将是&#34;客户&#34;或&#34; supplier&#34;,或者实际上是对另一个RelationshipTypes表的引用。但是,这会将大量表格添加到简单的数据模型中,所以从一开始你可能只想让事情变得简单:
在公司
has_many :businesses_as_client, class_name: "Business", inverse_of: :client, foreign_key: :client_id, dependent: :destroy
has_many :businesses_as_supplier, class_name: "Business", inverse_of: :supplier, foreign_key: :supplier_id, dependent: :destroy
在商业中
def companies
(self.businesses_as_client + self.businesses_as_supplier).collect(&:company)
end
这可能效率不高,所以你可以这样做:
def companies
Company.where(:id => (self.businesses_as_client.collect(&:supplier_id) + self.businesses_as_supplier.collect(&:client_id)))
end
或者某种顺序。对此进行扩展,您甚至可以在公司中尝试:
has_many :companies_as_client, through: :businesses_as_client
has_many :companies_as_supplier, through: businesses_as_supplier
def companies
companies_as_client + companies_as_supplier
end
这可能是一个很长的镜头!