has_many关系在同一个模型上,多个字段名称

时间:2016-08-26 18:01:45

标签: ruby-on-rails ruby activerecord associations mongoid

我有一个模型Company,其中包含以下字段:

  field :label,              type: String
  field :logo_url,           type: String
  field :status,             type: String
  belongs_to :company_lists, :class_name => 'Models::Persistence::CompanyList'

CompanyList

  field :label,            type: String
  field :status,           type: String
  has_and_belongs_to_many :companies, inverse_of: nil

我有Curriculum模型,其中可能有两种类型的公司列表hiring_company_listsponsoring_company_list

Curriculum模型如何在has_many上具有相同的CompanyList但具有不同的名称,以便每个列表ID可以不同(不是别名)。此外,Curriculum每个公司列表应该只有一种类型。

1 个答案:

答案 0 :(得分:3)

所以你希望在Curriculum上有两个has_many通过不同的名称指向Company模型吗?为什么不只是使用has_many through关联?

class CurriculumCompanyList < ActiveRecord::Base
  belongs_to :company
  belongs_to :curriculum
end

class Curriculum < ActiveRecord::Base
  has_many :curriculum_company_lists
  #here could be has_many as well if you point directly to companies instead of companylist
  has_one :hiring_company_list, through: :curriculum_company_lists
  has_one :sponsoring_company_list, through: :business_line_subscriptions
end

class CompanyList < ActiveRecord::Base
  has_many :curriculum_company_lists
  has_many :curriculums, through: :curriculum_company_lists
end

通过这种方式,您可以轻松地从课程中访问不同类型的公司列表:

curriculum = Curriculum.create
curriculum.sponsoring_company_list
curriculum.hiring_company_list