Rails 关联 "has_many :through" 在同一模型中

Rails association "has_many :through" in the same model

我有两个模型:公司和企业。 该业务属于两家公司(供应商和客户)。所以我写了:

商业模式:

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 访问与公司相关的公司。我该怎么做?

您可以有一个额外的 table BusinessRelationship,它有一个 属性,例如 "relationship_type",它可以是 "client" 或 "supplier",或者实际上是一个引用另一个 table 的 RelationshipTypes。但这会向一个简单的数据模型添加大量 table,因此开始时您可能只想保持简单:

在公司

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 

虽然这可能是一个远景!